var a = 100; (function(){ console.log(a); var a = 10; })();
输出的结果为何是undefined, 如何修改结果输出100?
ringa_lee
这段代码其实是这样
var a = 100; (function(){ var a; console.log(a); a = 10; })();
所以console.log(a)的时候JS引擎找到了作用域中的变量a,但是其值是undefined
console.log(a)
至于你想要让它输出100,那方法就多了去了,我提供个自己的
var a = 100; (function(num){ var a = num; console.log(a); })(a);
把外部作用域的a的值通过参数传入函数中,然后打印出来。这其实挺有用的。
另外说一下上面同学的第二个例子,这个例子其实不太好,因为有点混淆了。
首先if,for之类的操作符不会创建一个私有的作用域
if
for
if (true) { var b = 1000; } console.log(b); //1000,在外部也可以调用,实际上就是在全局的声明
然后上面这个例子
var a = 100; if(true){ console.log(a); var a = 10; }
其实就是
var a = 100; console.log(a); var a = 10;
感觉容易搞混。
结果为什么是undefined? 因为在console.log(a)时,function作用域里的a覆盖了上层作用域变量,而私有变量a没有初始化;
(function(){ //私有作用域 })();
如何输出100? 简单点的:
var a = 100; (function(){ var a = 100; console.log(a); })();
刚看到也可以这样:
推荐看下这篇文章:http://www.cnblogs.com/silentjesse/p/4024536.html
变量声明提升、立即执行函数充当块级作用域
undefined 是因为 变量提升的原因。 输出100 最简单了 console.log(100);
undefined
console.log(100);
1.javascript变量声明提升(hoisting)
2.注释 /* var a = 10 */; console.log(a) 是可以访问到上层作用域的 a 的。
/* var a = 10 */; console.log(a)
那我也来一个答案,上面都说的很清楚了
var a = 100; (function(a){ console.log(a); var a = 10; })(a);
曾经有人给我展示过这种奇葩的写法。按照那个人的说法,可以理解为javascript解释器对于声明变量的一个预加载机制。 即解释器在执行代码前会先寻找var声明的变量并注册(并不会赋值),所以function里的var语句无论写在哪,都会第一句就执行。 这也证明了将变量声明放在开始的重要性。 我想楼主是要输出全局变量a的值
var a = 100; (function(){ console.log(a); a = 10; console.log(a); })();
这样第一个a是100,第二个是10
我觉着这样最简单:var a = 100;
(function(){ console.log(a); a = 10; })();
输出的结果也是100
这段代码其实是这样
所以
console.log(a)
的时候JS引擎找到了作用域中的变量a,但是其值是undefined至于你想要让它输出100,那方法就多了去了,我提供个自己的
把外部作用域的a的值通过参数传入函数中,然后打印出来。这其实挺有用的。
另外说一下上面同学的第二个例子,这个例子其实不太好,因为有点混淆了。
首先
if
,for
之类的操作符不会创建一个私有的作用域然后上面这个例子
其实就是
感觉容易搞混。
结果为什么是undefined? 因为在console.log(a)时,function作用域里的a覆盖了上层作用域变量,而私有变量a没有初始化;
如何输出100? 简单点的:
刚看到也可以这样:
推荐看下这篇文章:http://www.cnblogs.com/silentjesse/p/4024536.html
变量声明提升、立即执行函数充当块级作用域
undefined
是因为 变量提升的原因。输出100 最简单了
console.log(100);
1.javascript变量声明提升(hoisting)
2.注释
/* var a = 10 */; console.log(a)
是可以访问到上层作用域的 a 的。那我也来一个答案,上面都说的很清楚了
曾经有人给我展示过这种奇葩的写法。按照那个人的说法,可以理解为javascript解释器对于声明变量的一个预加载机制。
即解释器在执行代码前会先寻找var声明的变量并注册(并不会赋值),所以function里的var语句无论写在哪,都会第一句就执行。
这也证明了将变量声明放在开始的重要性。
我想楼主是要输出全局变量a的值
这样第一个a是100,第二个是10
我觉着这样最简单:
var a = 100;
输出的结果也是100