[英]What's the difference between “function x.y()” and “x.y = function ()”?
这两段代码之间的唯一区别在于两个块引用中的第1行。
为什么这两段代码表现不同?
function cat.meow() {
console.log("Meow");
};
与
cat.meow = function () {
console.log("Meow");
};
第一个是无效的JavaScript,第二个是更好的主意,下面有更多细节......
变量/函数名称只能包含Letters,Underscores,$,Numbers(如果它们不是第一个字符)以及其他一些ACII和unicode字符 (请按照此处或此处按照Kaiido和Felix King的建议进行检查 )。 它与var cat.meow;
相同var cat.meow;
这是无效的JavaScript,会抛出错误。 进一步来说
SyntaxError:意外的标记'。'。
编译器期望括号或空格,但它看到一个句点而不是假设它是一个对象。 这也发生在对象的括号语法中:(这意味着你不能为第一种方法定义对象'item'的函数
当你这样做: foo = function () {}
它将foo的值设置为函数。 当你将它作为函数function foo () {}
它'创建' foo 。
第二个是指cat
meow
。 因此,它是设置meow
的cat
到有效的功能。 这相当于:
var cat = {
meow: function () {
console.log("Meow!");
}
};
显然是cat没有定义,这仍然会抛出一个错误。 如果你真的想拥有你的函数被调用cat.meow(我会强烈建议反对),你会做以下
window['cat.meow'] = function () {
console.log("Meow");
};
这会使全局范围变得混乱,除非你有一个不同的对象并且是非常糟糕的做法; 因此,如果您使用它,请秘密进行,否则几乎每个程序员都会抨击您的编码实践。
你至少尝试过吗? 第一个不是有效的JavaScript。 它应该产生
未捕获的SyntaxError:意外的令牌。
第二个是有效的。 在这种情况下, cat
是一个对象,你正在为它创建一个meow
方法。
错误暗示了什么.
不是有效的标识符 。 在javascript和大多数语言中,任何与正则表达式\\w+
匹配的内容,即字母数字字符+下划线,都是有效的标识符。
在大多数语言中,包括javascript, 标识符也必须以字母或下划线开头。 但是在javascript中, $
也是一个有效的标识符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.