作用域链,立即执行函数

运行期上下文
当函数执行时,会创建一个称为“执行期上下文”的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会创建多个执行上下文,当函数执行完毕,函数的执行上下文会被销毁。

作用域
[[scope]]:每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个;
[[scope]]指的就是我们所说的作用域,其中存取了执行期上下文的集合。

作用域链
[[scope]]所存储的执行期上下文对象的集合,这个集合成链式链接,也就是所谓的作用域链。

立即执行函数:
**定义:**此类函数没有声明,在一次执行过后即释放销毁。适合做初始化工作。
凡是只执行一次的函数都叫做针对初始化功能的函数,函数名可有可无。

 //函数形式有两种,但建议第一种,执行完一次就会被销毁
(function(){
}());

(function(){
})() 

//立即执行函数可以有参数
(function aa(a,b){
	cosole.log(a + b);
}(1,2))  //输出3,但是再次访问aa(),会报错undefinde.

//也可以有返回值
var num = (function aa(a,b){
	 var c = a + b;
	 return c; 
}(1,2));   //返回的值会变量num里面,num == 3

2、只有表达式才能被执行符号执行,例:

function test(){
	console.log("123");
}();   //此种写法会报语法错误,因为()前的语句是叫函数声明,不是叫表达式

test();  //输出123,在这里会正常执行,单独的函数引用后面加括号表示执行

var test = function(){
	console.log("123");
}()   //输出123,因为括号前的语句是函数表达式,所以会执行。

3、有一个例外就是:

 function test(a, b, c){
	console.log(a + b + c);
}(1, 2, 3)   //在后面括号里面写参数,是可以执行的,不会报语法错误,但是没有返回值,只是单纯的执行而已

4、能被执行符号所执行的表达式,会自动放弃函数的引用,也就是相当于成了立即执行函数,执行完后再访问函数引用,会显示undefined

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值