gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:12:48 24 4
gpt4 key购买 nike

请看我的例子:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com