以下代码为什么输出结果是10,10?在https://segmentfault.com/a/11...看了函数创建和执行时作用域链的创建过程,那么立即执行函数的作用域链是怎么形成的?
var bo = 10;
function foo() {
console.log(bo);
}
(function() {
var bo = 20;
foo();
})();
(function (func) {
var bo = 30;
func();
})(foo)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
立即执行函数的作用域链 与普通函数作用域链一样.(要说区别,立即不会提升)
先看看这个视频作用域
然后理解这篇文章AO/VO 作用域链
函数的Scope由函数定义处决定, 所以无论你在什么Scope下调用
foo(), 能访问到的bo都是你在第一行也就是var bo = 10;处定义的bo.以下 可以实现理想上的打印结果 此时相当于 后面两个函数调用
foo函数 并向其传递参数 如果不传递 打印结果为undefined此时的bo以及是属于函数内部的变量了很简单,你的两个(function(){...})()里定义的var bo=xxx都是在一个局部作用域中,它们都不会影响外面全局的
var bo=10;
而你的foo()调用的时候全都【没传参】,所以最后输出的都是全局上的bo=10
简单一句话:任何函数都有作用域,浏览器下默认是 window。
解释完毕。
其实这个话题应该了解的是原型链;那么我再话痨几句什么是原型链,简单理解就是
new一个实例,因为任何一个函数都是可以被实例的。那么会把
a被传入构造函数并替代this(浏览器下默认是 window)。以上。