Noob在这里提问。请参阅下面的代码。
我在哪里可以阅读更多内容?我的意思是,this_variable
获得 100 。所有后来定义的函数似乎都能够访问这个变量并获得它的价值,但是我想知道它有多深?我正在研究Chrome扩展程序,该死的东西只适用于回调;我需要能够在一个非常深层嵌套的回调中访问内容,我需要确保我写的内容是可靠的并且保持一致。
(function(){
this_variable = 100;
(function(){
(function(){
(function(){
(function(){
(function(){
tadaaa = this_variable;
console.log(tadaaa); // sais 100
}());
}());
}());
}());
}());
}());
答案 0 :(得分:6)
没有限制。虽然如果你的嵌套深度足以担心限制,我会质疑整体设计。
答案 1 :(得分:2)
只要变量是'范围',就可以访问它(假设它没有被隐藏)。您可以随意嵌套。请参阅MDN的here for scoping and closure reference。
答案 2 :(得分:2)
尽可能深入。该概念的名称为closures,在编写高级JavaScript时,它是最重要概念。
答案 3 :(得分:1)
就你而言..
在某些时候它可能会变慢,但在回调中仍然可以访问。
答案 4 :(得分:0)
Javascript使用函数作用域。规则是如果在顶级函数中设置了变量,那么顶级函数中的所有嵌套函数都可以访问该变量。如果在嵌套函数中声明了变量,那么顶级函数将无法访问该变量。
//Immediately invoked function that scopes jQuery and outside code cannot access
$(function() {
//top-level function
function test() {
var a = true;
//nested function
function nestedTesting() {
//The nested function has access to a
console.log(a);
var b = false;
}
nestedTesting();
//The top level function does not have access to b
console.log(b);
}
test();
});
预期结果: