【发布时间】:2022-01-05 15:05:54
【问题描述】:
函数是一个对象,它是一种通过链接访问的非原始数据类型。当我们将函数分配给两个不同的变量时,预计当我们更改存储在函数内部的数据时,例如变量的值,在我们分配函数的变量之一中,它应该在两个变量中都更改为哪个函数被分配了。
但是,当为分配了相同函数的变量之一更改词法环境时,情况并非如此。在这种情况下,更改的数据仅针对存储在执行更改的变量中的函数的词法环境而更改。
目前,我无法从逻辑上解释这一点。下面的代码怎么可能一直为 messenger1 提供没有变化的结果?
const createMessenger = () => {
let greeting = 'hi, buddy!';
function sendMessage(name) {
const sender = 'your master!';
console.log(`${name}, ${greeting} It is ${sender}`);
}
function setGreeting(text) {
greeting = text;
}
return {
sendMessage,
setGreeting,
}
}
const messenger1 = createMessenger();
messenger1.sendMessage('Leonardo');
const messenger2 = createMessenger();
messenger2.sendMessage('Michelangelo');
messenger1.setGreeting('hiya!!!');
messenger1.sendMessage('Rafael');
messenger2.sendMessage('Donatello');
messenger1.sendMessage('Splinter');
控制台结果:
Leonardo, hi, buddy! It is your master!
Michelangelo, hi, buddy! It is your master!
Rafael, hiya!!! It is your master!
Donatello, hi, buddy! It is your master!
plinter, hiya!!! It is your master!
【问题讨论】:
-
您遇到了什么问题?
-
How do I ask a good question?: "描述问题。“它不起作用”的描述不足以帮助人们理解您的问题。相反,告诉其他读者预期的行为应该是什么。告诉其他读者错误消息的确切措辞是什么,以及产生它的代码行。”
-
"当我们将一个函数分配给两个不同的变量时,预计当我们更改存储在函数内的数据时,例如变量的值,在我们要访问的变量之一中分配了函数,它应该在分配函数的两个变量中发生变化。“这是正确的。您根本没有分配 一个 对象,您有两个不同的对象。
-
"存储在函数内部的数据,例如变量的值" - 您可能会将作为函数关闭的词法环境一部分的变量与调用函数时创建。
-
您是否意识到您的示例中有 5 个不同的函数对象?
标签: javascript object syntax