寻鱼水之欢 2022-05-04 13:57:12
我可能搞错了,但是我觉得以下这个代码片段
/* part 1 */
function a() {
a = 1;
console.log("a1:", a);
};
/* part 2 */
function a() {
a = 2;
console.log("a1:", a);
};
a();
console.log("a2:", a);
证明了它和 Function.name 的 Writable 属性 是没有关系的
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/name
Function.name 只是一个 Function 的命名和它是否可以被赋值无关
同时,另外一种说法,也就是《命名函数》如 function a() {...} 内《和命名函数同名的变量》会优先指向命名函数本身
这种说法应该也是错误的,为什么呢,因为以上的代码打印的是 a1: 2, a2: 2 也就是说,不仅《命名函数》/* part 2 */ function a() {...} 内的 a 可以被修改,打印为2,实际上 window.a 也被修改了,最终打印为2
也就是说实际上只有单纯有《命名函数》,是不构成函数内《和命名函数同名的变量》会优先指向命名函数本身这个现象,而以上片段实际上应该相当于
/* part 1 */
var a = function () {
a = 1;
console.log("a1:", a);
};
/* part 2 */
var a = function () {
a = 2;
console.log("a1:", a);
};
a();
console.log("a2:", a);
那么我们发现只有在《自启动命名函数》或《被赋值的命名函数》,也就是:
void function a() { ... }
var a = function a() { ... }
时,函数的内部作用域中的 《和命名函数同名的变量》 a 才会优先指向《命名函数》本身
实际上无论哪种写法,都是需要该命名函数《不被挂载在window对象上》,换而言之,需要使得《和命名函数同名的变量》 a 才会优先指向《命名函数》本身,《命名函数》本身必须处于一种“流离失所”的状态
- 共 1 页
- 1
@nlffeng 可以给个repo或者其它例子实际查看下吗?
Webpack 日常使用与优化之 webpack.optimize.CommonsChunkPlugin 比你想的更强大/配置更复杂