javaScript 关闭。未定义的值作为输入停止脚本。有时
javaScript closures. Undefined value as input stops script. Sometimes
玩 javascript 闭包我最终遇到了这个我无法解释的问题。
(function() {
console.log("Inside closure"); //does not work
}(foo));
它不起作用,因为 foo 未定义。参考错误
但如果我事先设置 var foo = undefined;
它会起作用(在 Chrome 和 ff 上测试)。
undefined和设置为undefined不一样吗?
如果问题是:
But what if somebody uses the the common jQuery wrapper and has the jQuery script not working yet?
如果 jQuery 标识符不在全局范围内,你仍然会得到一个引用错误,因为它试图找到对 jQuery 的引用,但它不存在。
在闭包中传递了 undefined 关键字,这样如果给 undefined 赋值,它就不会弄乱你的代码。例如:
var undefined = 123
if(undefined){
console.log("pass")
}
此代码将通过。如果您通过 undefined 传递但在调用它时省略了参数,则 undefined 将没有分配给它的值。它不会寻找参考,因为您没有分配参数例如:
(function(undefined){
// undefined will be undefined.
}())
我在这里为您做了一个简单的例子:https://jsfiddle.net/gn7h3641/
TLDR :如果您向 JavaScript 询问不存在的变量的值(未使用 var 定义),它将爆炸,因为它还没有找到该值的引用不同于检查 'if(test === undefined)'
中是否有未定义的内容
具有未定义值的变量与没有具有该名称的变量是不同的。
在 ECMAScript 中,标识符是根据 Identifier Resolution, which returns a reference given by GetIdentifierReference 解析的。
如果变量不存在,则该引用的基值将是未定义的,否则它将是一个环境记录。
当GetValue gets the value of that reference, it will check IsUnresolvableReference。如果基值未定义,它将 return false,GetValue 将抛出 ReferenceError 异常。
如果变量存在(即使它的值未定义),GetValue 将return它的值。
如果不确定某个变量是否存在,可以使用the typeof
operator,其中returns "undefined"
用于不可解析的引用而不是抛出。
在javaScript中,'undefined'是原始数据类型之一。它表示对象的类型。
var a = undefined;
var b;
console.log((typeof(a)));
console.log((typeOf(b)));
这两种情况的输出都是未定义的。
如果您根本不声明变量并尝试访问它,抛出的错误将如下所示。我试图访问根本没有声明的 c 。
未捕获的 ReferenceError:c 未定义(…)
玩 javascript 闭包我最终遇到了这个我无法解释的问题。
(function() {
console.log("Inside closure"); //does not work
}(foo));
它不起作用,因为 foo 未定义。参考错误
但如果我事先设置 var foo = undefined;
它会起作用(在 Chrome 和 ff 上测试)。
undefined和设置为undefined不一样吗?
如果问题是:
But what if somebody uses the the common jQuery wrapper and has the jQuery script not working yet?
如果 jQuery 标识符不在全局范围内,你仍然会得到一个引用错误,因为它试图找到对 jQuery 的引用,但它不存在。
在闭包中传递了 undefined 关键字,这样如果给 undefined 赋值,它就不会弄乱你的代码。例如:
var undefined = 123
if(undefined){
console.log("pass")
}
此代码将通过。如果您通过 undefined 传递但在调用它时省略了参数,则 undefined 将没有分配给它的值。它不会寻找参考,因为您没有分配参数例如:
(function(undefined){
// undefined will be undefined.
}())
我在这里为您做了一个简单的例子:https://jsfiddle.net/gn7h3641/
TLDR :如果您向 JavaScript 询问不存在的变量的值(未使用 var 定义),它将爆炸,因为它还没有找到该值的引用不同于检查 'if(test === undefined)'
中是否有未定义的内容具有未定义值的变量与没有具有该名称的变量是不同的。
在 ECMAScript 中,标识符是根据 Identifier Resolution, which returns a reference given by GetIdentifierReference 解析的。
如果变量不存在,则该引用的基值将是未定义的,否则它将是一个环境记录。
当GetValue gets the value of that reference, it will check IsUnresolvableReference。如果基值未定义,它将 return false,GetValue 将抛出 ReferenceError 异常。
如果变量存在(即使它的值未定义),GetValue 将return它的值。
如果不确定某个变量是否存在,可以使用the typeof
operator,其中returns "undefined"
用于不可解析的引用而不是抛出。
在javaScript中,'undefined'是原始数据类型之一。它表示对象的类型。
var a = undefined;
var b;
console.log((typeof(a)));
console.log((typeOf(b)));
这两种情况的输出都是未定义的。
如果您根本不声明变量并尝试访问它,抛出的错误将如下所示。我试图访问根本没有声明的 c 。 未捕获的 ReferenceError:c 未定义(…)