繁体   English   中英

“function xy()”和“xy = function()”之间有什么区别?

[英]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字符 (请按照此处此处按照KaiidoFelix King的建议进行检查 )。 它与var cat.meow;相同var cat.meow; 这是无效的JavaScript,会抛出错误。 进一步来说

SyntaxError:意外的标记'。'。

编译器期望括号或空格,但它看到一个句点而不是假设它是一个对象。 这也发生在对象的括号语法中:(这意味着你不能为第一种方法定义对象'item'的函数

说明

当你这样做: foo = function () {}它将foo的值设置为函数。 当你将它作为函数function foo () {}它'创建' foo

所以...

第二个是指cat meow 因此,它是设置meowcat到有效的功能。 这相当于:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM