将函数赋值给变量时,变量存储的是函数本身还是引用?
函数赋值给变量时的存储机制和对象一致吗?
是的,完全遵循相同的流程。
在JavaScript中,函数属于Function类型的对象,所以当你把函数赋值给变量时,变量存储的并不是函数的代码本身,而是指向内存中该函数对象所在位置的引用值。
你可以通过以下代码验证这一点:
// 定义初始函数 function sayHello() { console.log('Hello!'); } // 将函数赋值给新变量 const greet = sayHello; // 让原变量指向一个新函数 sayHello = function() { console.log('Hi there!'); }; // 调用greet,输出原函数的内容——说明greet保存的是原函数的引用 greet(); // 输出: Hello! // 调用sayHello,输出新函数的内容 sayHello(); // 输出: Hi there!
这个例子里,greet保存的是最初sayHello指向的函数对象的引用,所以即使后续修改了sayHello的指向,greet依然指向原来的函数对象,这直接证明了变量存储的是引用而非函数本身。
另外,也可以通过全等判断来确认两个变量是否指向同一个函数对象:
function add(a, b) { return a + b; } const sum = add; console.log(sum === add); // 输出: true,说明两个变量指向内存中同一个函数对象
简单总结:函数作为对象的一种,赋值给变量时的逻辑和普通对象完全一致——变量存储的是指向该函数在内存中位置的引用值。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

