javascript 中的变量定义

variable definition in javascript

我不知道如何描述我的问题。

(function(fn){
    var able=123;
    function tmp(){
        fn()
    };
    tmp();
})(function(){alert(able)});

此代码段引发引用错误:able 未定义' .

能否请您解释一下 javascript 如何向我获取变量?

函数在创建时创建词法闭包。这意味着当创建警报函数时, able 变量不存在。将 fn 的执行包装在稍后确实知道 able 的词法闭包中不会影响已经创建的 fn.

的词法闭包

如果您提出一个问题可以更好地解释您正在尝试做的事情,我们可以建议如何正确使用闭包来表达该想法。

"fn"函数的作用域与"parent"函数不一样,调用fn函数时应传递"able"参数,然后在实例化fn 函数本身,像这样:

(function(fn){
    var able=123;
    function tmp(){
        fn(able)
    };
    tmp();
})(function(able){alert(able)});

java 函数局部和全局作用域中的脚本支持。 在这种情况下,"able" 是您无法在函数外部访问的局部函数范围。
如果您使用 var 变量将在本地范围内声明。如果你只是声明没有 var 的变量,它将在全局范围内声明

您的代码可以使用命名函数重写为:

var func1 = function(fn) {
    var able=123;
    function tmp(){
        fn()
    };
    tmp();
}
var func2 = function() {
    alert(able)
}
func1(func2);

我相信这样很明显,变量 'able' 是在 'func1' 中定义的(更准确地说是在其本地范围内)并且您正试图在 'func2' 中访问它在 'func1' 的范围之外,所以它不能 "see" 进入这个范围。

可在此处找到有关 JavaScript 范围界定的更多信息:What is the scope of variables in JavaScript?