IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js 函数表达式及立即执行函数深入剖析 -> 正文阅读

[JavaScript知识库]js 函数表达式及立即执行函数深入剖析

表达式

讲立即函数之前,首先来理解什么是表达式
表达式: 指的是可以被求值的代码,也就是说只要代码能求得(返回)一个值的,它就是表达式。
例子:
以下都是表达式,这里只举一部分例子。

var a = 10 //赋值表达式,它的结果就是 10

a; //变量表达式,它的结果就是10

123; //也是表达式 它的结果就是它本身

'abc'; //字符串表达式 结果是自身

var arr = [1,2,3]; //数组创建表达式,结果是数组的引用地址

a[1]; //数据访问表达式,它的结果就是2

2 * 2;  //运算表达式

var obj = {} //对象创建表达式 结果是对象的引用地址

以上123、‘abc’ a是原始表达式,是表达式中最小的单位,不能包含其他表达式,而其他的表达式都是复杂表达式,也就是说由其他表达式组成的表达式,比如var arr = [1,2,3]; 是由赋值表达式和数组表达式组成的复杂表达式,在比如a[1]是由变量表达式和原始表达式组成的

总结: 表达式指的是可用于计算得出结果的式子,即可能产生一个值的式子。

语句: 是一条完整的指令,就像我们汉字里的一句话一样,使用句号表示句子的结尾,而在程序中是以分号结尾,表示一条指令的结尾。

表达式和语句的区别
表达式是可以被求值的代码,而语句不全是,表达式可以是语句,而语句不全是表达式,比如if、for、break等都是不能被求值的,所以这些代码都不是表达式。

函数表达式和函数声明的区别

根据上面的分析,只要能被求值的就叫做表达式,因此函数表达式一定是能被求值的并且它的值就是函数引用,而函数声明是不能被求值,函数声明仅仅是创建函数,函数声明没有结果。

以下代码为函数表达式
为什么呢? 因为函数作为赋值的一部分,它必须能返回一个函数的引用地址,所以它必然会被js引擎解析为函数表达式
以下函数表达式的结果就是该函数的引用地址

var a = function(){}; 

以下代码为函数声明
它仅仅是创建,它并没有返回值,不能被求值。

function a(){
}

立即执行函数

也叫初始化函数,函数只执行一次就被销毁,适合做初始化的工作。

语法: 函数名可选
函数表达式还要补充一点,函数表达式的函数名只在内部有效,在函数外部函数名会被忽略掉,因此立即执行函数为什么会执行一次就销毁,因为函数名在外部是会被忽略掉的。

注释: 立即执行函数都是函数表达式

(fucntion 函数名(参数,参数)(){
	return;
}())
或者
(fucntion (参数,参数)(){
	return;
})()

例子:
函数执行完一次就再也找不到,立即被销毁,函数名fn在函数外部会被忽略掉,因此你在函数外部使用函数名fn会报错,但是在内部是可以使用fn。

(function fn(){
    var a = 123;
    var b = 234;
    console.log(fn); 可以被执行,值是函数
    console.log(a + b);
}());

fn() 报错找不到fn这个标识符

以上代码为什么可以被执行呢?
我们执行函数就是函数引用地址加对括号()就能执行,因为只有找到函数的引用地址才能执行函数,函数声明是创建函数,并不能被取值,所以函数声明不能直接被执行。而函数表达式可以被取值。表达式的值返回的是函数引用,因此函数表达式可以被执行。

分组操作符()
这里来解释一下什么是分组操作符,括号()运算符也叫分组操作符,它的作用是将里面表达式的求值结果返回,因此里面必须是一个表达式不能是声明语句,即使是函数声明语句也会被解析成函数表达式。

ps: if for var等语句不能写在()中,因为这些语句不能被解析成表达式

函数声明的例子
以下代码会报错,因为函数声明不能被执行,换句话中不能求得函数的引用地址,没有函数引用地址就无法执行函数,所以()被js解析成了分组操作符就是我们数学当中(),并没有被解析成函数执行的符号,而分组操作符里面必须要有表达式否则会报错。

function fn(){
	console.log('success');
}();

()被解析成了分组操作符不是函数执行符,分组操作符里面必须是表达式否则报错
如果是以下这种情况就不会报错,但函数也不会得到执行。

function fn(a,b,c){
	console.log('success');
}(1,2,3)
上面函数没有得到执行也没有报错,因为括号里面是逗号表达式所以才没有报错
如果括号里什么都没写就会报错

函数表达式的例子
函数表达式是可以被求值,它的值就是函数的引用,因此可以通过找地址找到函数,执行函数里面的代码,因此以下代码都可以得到执行。

var a = fucntion(){
	console.log(1111)
}();

(function(){
	console.log(111);
}())

+ function (){
	console.log(2222);
}()

- function(){
	console.log();
}()

上面为什么运算符也可以执行函数? 因为正负是运算符,因此后面的函数必须解析成表达式求得一个结果,才能执行正负运算,声明语句是不能执行正负运算的,()里面必须是表达式,因此()里的函数会被解析成函数表达式。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:06:01  更:2022-05-07 11:06:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:14:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码