关于undefined在函数中被重新赋值后的变化
var undefined = 123;
function a(something, undefined) {
alert(undefined);//123
}
a('Hello World',42);
var undefined = 123;
(function(something, foo, undefined) {
// 局部作用域里的 undefined 变量重新获得了 `undefined` 值
alert(undefined);//undefined
})('Hello World', 42);
一个函数不同的构造方式,结果却恰恰相反,谁能给解释下。。。
看了一篇文章,琢磨透了。。
()是定义的一个作用域。。undefined会把作用域内的变量(undefined)提到作用域开始先赋值。。
因为foo,something作为参数已经赋值,而undefined没有赋值,所以被重新定义为undefined。(如果再加一个参数,argu2,打出来也是undefined)
结合另外一个例子,加深理解下
var myvar = 'my value';
(function() {
alert(myvar); // undefined
var myvar = 'local value'; //1
})();
看上去和上面的undefined一样,其实注意(1)处,其实这个赋值,会导致提升变量声明,
“ var
表达式(和 function
声明都)将会被提升到当前作用域的顶部。”
相当于
var myvar;
alert(myvar);
....
下面看一个function提升声明的例子
//bar();报错
var bar = function() {alert('bar');};
var someValue = 42;
test();
function test(data) {
alert('test');//打印
}