为什么javascript函数里面的括号不能访问外面?
Why javascript function parentheses can not access the outside?
我很好奇,为什么不只是 javascript 函数作用域呢?为什么只加一个括号就不能访问呢?我的猜测是括号和javascript相关的操作,但是不知道这个子原理和设计到底是为什么?
(function test(){
console.log( test );
})();
test();//Uncaught ReferenceError: test is not defined IE8- is ok
或
(function test(){
console.log( test );
});
test();//Uncaught ReferenceError: test is not defined IE8- is ok
当您像以前那样将函数括在括号中时,它确实会把它放在一个新的范围内。
它也像一个 return 值,这就是为什么它可以称为 IIFE,即立即调用函数表达式。
另一种重写它的方法,这样更有意义:
var myFunc = (function test(){
alert('Hello!');
});
myFunc(); // Works!
test(); // Doesn't work!
要了解更多信息,您应该阅读 IIFE - Immediately-invoked function expression。
简短版本 - 函数在其自己的范围内运行,除非您将参数传递给它,如下所示:
(function test(x) {
alert(x); //alerts "yey!";
})("yey!");
我很好奇,为什么不只是 javascript 函数作用域呢?为什么只加一个括号就不能访问呢?我的猜测是括号和javascript相关的操作,但是不知道这个子原理和设计到底是为什么?
(function test(){
console.log( test );
})();
test();//Uncaught ReferenceError: test is not defined IE8- is ok
或
(function test(){
console.log( test );
});
test();//Uncaught ReferenceError: test is not defined IE8- is ok
当您像以前那样将函数括在括号中时,它确实会把它放在一个新的范围内。
它也像一个 return 值,这就是为什么它可以称为 IIFE,即立即调用函数表达式。
另一种重写它的方法,这样更有意义:
var myFunc = (function test(){
alert('Hello!');
});
myFunc(); // Works!
test(); // Doesn't work!
要了解更多信息,您应该阅读 IIFE - Immediately-invoked function expression。
简短版本 - 函数在其自己的范围内运行,除非您将参数传递给它,如下所示:
(function test(x) {
alert(x); //alerts "yey!";
})("yey!");