var a = 100;
(function(){
console.log(a);
var a = 10;
})();
输出的结果为何是undefined, 如何修改结果输出100?
var a = 100;
(function(){
console.log(a);
var a = 10;
})();
输出的结果为何是undefined, 如何修改结果输出100?
结果为什么是undefined? 因为在console.log(a)时,function作用域里的a覆盖了上层作用域变量,而私有变量a没有初始化;
(function(){
//私有作用域
})();
如何输出100? 简单点的:
var a = 100;
(function(){
var a = 100;
console.log(a);
})();
刚看到也可以这样:
var a = 100;
if(true){
console.log(a);
var a = 10;
}
曾经有人给我展示过这种奇葩的写法。按照那个人的说法,可以理解为javascript解释器对于声明变量的一个预加载机制。
即解释器在执行代码前会先寻找var声明的变量并注册(并不会赋值),所以function里的var语句无论写在哪,都会第一句就执行。
这也证明了将变量声明放在开始的重要性。
我想楼主是要输出全局变量a的值
var a = 100;
(function(){
console.log(a);
a = 10;
console.log(a);
})();
这样第一个a是100,第二个是10
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
这段代码其实是这样
所以
console.log(a)
的时候JS引擎找到了作用域中的变量a,但是其值是undefined至于你想要让它输出100,那方法就多了去了,我提供个自己的
把外部作用域的a的值通过参数传入函数中,然后打印出来。这其实挺有用的。
另外说一下上面同学的第二个例子,这个例子其实不太好,因为有点混淆了。
首先
if
,for
之类的操作符不会创建一个私有的作用域然后上面这个例子
其实就是
感觉容易搞混。