这两段代码之间的唯一区别在于两个块引用中的第1行。
为什么这两段代码表现不同?
function cat.meow() {
console.log("Meow");
};
与
cat.meow = function () {
console.log("Meow");
};
答案 0 :(得分:6)
第一个是无效的JavaScript,第二个是更好的主意,下面有更多细节......
变量/函数名称只能包含字母,下划线,$,数字(如果它们不是第一个字符)以及其他一些ACII和unicode字符(选中{{3}根据{{3}}和here的建议,或here}。它与var cat.meow;
相同,它是无效的JavaScript并会抛出错误。更具体地说
SyntaxError:意外的标记'。'。
编译器期望括号或空格,但它会看到一个句点而不是假设它是一个对象。这也发生在对象的括号语法中:(这意味着你无法为第一种方式定义对象'item'的函数
当你这样做时:
{em}将 foo 的值设置为该函数。foo = function () {}
当您将其作为函数function foo () {}
执行时,它会'创建' foo 。
第二个是指meow
中的cat
。因此,它将meow
中的cat
设置为有效的函数。这相当于:
var cat = {
meow: function () {
console.log("Meow!");
}
};
显然cat没有定义,这仍然会抛出错误。如果你真的真的想让你的函数被称为cat.meow (我强烈建议反对它),你会做以下事情
window['cat.meow'] = function () {
console.log("Meow");
};
除非你有一个不同的对象并且极其不好的做法,否则这会使全局范围变得混乱;因此,如果您使用它,请秘密进行,否则几乎每个程序员都会抨击您的编码实践。
答案 1 :(得分:3)
你至少尝试过吗?第一个不是有效的JavaScript。它应该产生
Uncaught SyntaxError:意外的令牌。
第二个是有效的。在这种情况下,cat
是一个对象,您可以为其创建meow
方法。
该错误表明.
不是有效的标识符。在javascript和大多数语言中,与正则表达式\w+
匹配的任何内容(包括字母数字字符+下划线)都是有效的标识符。
在大多数语言(包括javascript)中,还必须让标识符以字母或下划线开头。但是,在javascript中,$
也是有效的标识符。