gpt4 book ai didi

Javascript 是否可以在返回中声明函数?

转载 作者:行者123 更新时间:2023-11-30 07:20:27 31 4
gpt4 key购买 nike

根据这篇文章(https://www.intertech.com/Blog/encapsulation-in-javascript/),下面的代码是JS封装的一个例子。它所做的基本上是限制修改变量 fullName 的可能性,因此只有当新的 fullName 没有数字时才可以更改。

  var person = (function () {

var fullName = "Jason Shapiro";
var reg = new RegExp(/\d+/);

return {
setFullName : function (newValue) {
if( reg.test(newValue) ) {
alert("Invalid Name");
}
else {
fullName = newValue;
}
},
getFullName : function () {
return fullName;
}
}; // end of the return
}());

alert(person.getFullName()); // Jim White is printed again.

person.setFullName( 42 ); // Invalid Name; the name is not changed

这一切对我来说似乎都是合乎逻辑的,但我无法理解的是,如果这些函数在返回 block 中,他如何调用 getFullName 或 setFullName。

最佳答案

这个例子并不奇怪;我们只需要把它分解。

  1. 正在声明一个名为 person 的变量。

  2. 人是什么对象?好吧,这是对零参数调用匿名函数的结果。

  3. 调用该匿名函数时,它会返回一个对象。

  4. 函数返回的对象有两个属性,setFullNamegetFullName

  5. 函数返回的对象是变量person的值。因此 person.getFullNameperson.setFullName 都是有效的表达式。

我认为混淆点可能是您认为 getFullNamesetFullName 的范围仅限于 return 表达式内的代码。然而,JavaScript 是一种非常动态的语言。可以随时向对象添加和删除属性。 JavaScript 解释器在运行时而不是编译时检查属性是否存在。

关于Javascript 是否可以在返回中声明函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48480757/

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