scope - 从 jQuery 函数外部访问变量

标签 scope javascript

请看我的例子:

var AbcVar = "abc";

function Abc(AbcVar){
  console.log(AbcVar);
}

这是允许函数访问external var的错误方式吗?

为什么console.log的输出是undefined

最佳答案

是时候见见 Scoping 先生了。

说白了,作用域就是对变量的封装(注意在javascript中,函数也是变量。)现在,在我刚刚编造的虚构语言中,{字符开始一个范围和}结束它,变量用简单的相等定义(例如 x = 42):

{                                                                    |
    x = 42;                                                          |
    {                                           |                    |
        y = "I'm in an inner scope!";           |                    |
        x == 42; //true                         |                    |
        {                                  |    |                    |
            x == 42;                       |    |                    |
            y == "I'm in an inner scope!"; |    |                    |
                                           | x, y, z are defined     |
            z = "pyramid time!";           |    |                    |
            y = y + "...not";              |    | x, y are defined   | x is defined
        }                                  |    |                    |
        y == "I'm in an inner scope!...not";    |                    |
        //z is not defined                      |                    |
        x = 4;                                  |                    |
    }                                           |                    |
    x == 4;                                                          |
    //y is undefined                                                 |
    //z is undefined                                                 |
}                                                                    |

javascript 有词法作用域。简而言之,函数创建了一个新的作用域:

var x = 42;
(funciton () {
    x === 42;
    var y = 5;
})();
//y is undefined

现在,有一个额外的地方可以创建变量,那就是在函数参数中。以下两个函数的行为相同(arguments 是一个包含传递给函数的参数的伪数组):

function parameterfull(a, b, c) {
    //do stuff with a, b, c
}

function parameterless() {
    var a = arguments[0], b = arguments[1], c = arguments[2];
    //do stuff with a, b, c
}

如果你碰巧没有传递一个参数,它的值将是undefined .

现在,使用你的函数和上面的翻译:

var AbcVar = "abc";

function Abc() {
    var AbcVar = arguments[0];
    console.log(AbcVar);
}

现在你明白为什么了 AbcVar是(有时)undefined在函数内部。


tl;dr 函数参数AbcVar正在覆盖全局变量 AbcVar ,并且由于您没有将值传递给函数,因此它是 undefined (但仅在函数内部,全局 AbcVar 保持不变。)

关于scope - 从 jQuery 函数外部访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008684/

相关文章:

JavaScript 变量作用域

javascript - 叶状组件中的 connect() 是 react+redux 中反模式的标志吗?

c++ - 在没有new关键字的情况下创建的c++中结构对象的范围

javascript - 检查函数是否已经绑定(bind)在纯 JavaScript 中的更好方法?

javascript - 我如何将按钮放在文本区域内并限制文本区域的大小?

javascript - 动态添加脚本时捕获js错误

java - 如何从日期时间中仅获取时间(2011-04-23 09 :30:51:01) in java or javascript or jquery

javascript - JS(或 mootools,如果首选)鼠标是否退出到另一个元素?

ruby-on-rails - Rails Scope返回all而不是nil

javascript - 如何制作全局.checked语句并调用它?