gpt4 book ai didi

JavaScript 私有(private)方法 : function expression vs function declaration

转载 作者:行者123 更新时间:2023-11-27 23:44:17 25 4
gpt4 key购买 nike

在 javascript 中创建私有(private)方法(某种)的常见方法是:

Class = function (arg0, arg1) {
var private_member = 0;
var privateMethod = function () {
return private_member;
};
}

上面的示例也可以使用函数声明而不是函数表达式来完成:

Class = function (arg0, arg1) {
var private_member = 0;
function privateMethod () {
return private_member;
}
}

这两种声明私有(private)方法的方式有何不同? (除了一个是表达式,另一个是声明之外)

例如,每次调用构造函数时,表达式显然都会生成一个新函数。函数声明也会发生这种情况吗?还是因为函数声明在解析时求值,所以只求值一次? (与在执行时评估的函数表达式相反,您明白了。)

编辑:我知道 JavaScript 并没有真正有私有(private)方法。我宽松地使用这个术语。

编辑:不是 var functionName = function() {} vs function functionName() {} 的重复项,如果有的话,是 function expression vs function declaration with regard to javascript 'classes' 的重复项。我的问题不是关于函数表达式和函数声明之间的一般差异,而是它们在 javascript“类”中的“私有(private)成员”方面的差异。

最佳答案

the expression obviously generates a new function everytime the constructor gets called. Does this happen with the function declaration aswell [...]?

任一方法每次都会生成一个新函数

because function declarations are evaluated at parse time

函数声明的提升方式与 vard 标识符的提升方式类似。这发生在调用它们所在范围的开始时

In what ways are these two ways of [defining a] method different?

这与其他地方相同,您可以在定义函数之前的行上引用函数声明(假设它在您的范围内)

foo.bar; // undefined
function foo() {}

vs 函数表达式尚未提升,因此标识符 foo 是可引用的,但您无法引用您将分配给它的函数,直到

foo.bar; // TypeError: Cannot read property 'bar' of undefined
var foo = function () {};
// same as
var foo;
foo.bar; // TypeError: Cannot read property 'bar' of undefined
foo = function () {};
<小时/>

请确保您了解JavaScript与经典编程语言不同;经典程序员在谈论 JavaScript 时使用“public”和“private”这两个词来表示“外部可引用”和< em>分别为“不可外部引用”。
同样,实际上并不存在“类”这样的东西(即使在 ES 6 中,它也只是我们在 ES 5 中所做的事情的语法糖。 em>)。相反,我们有构造函数原型(prototype)链

关于JavaScript 私有(private)方法 : function expression vs function declaration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380537/

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