为什么命名函数表达式本身不能将名称分配给另一个值?
Why Named Function Expression itself cannot assign Name to another Value?
var functionVariable = function functionExpressionName() {
functionExpressionName = 1;
console.log(functionExpressionName) // function
};
functionVariable();
如果你 运行 这个例子你可以看到我们不能重新分配给 functionExpressionName 任何东西。
但这也很有趣,我们可以重新声明 functionExpressionName 之后我们可以将任何内容分配给 functionExpressionName
var functionVariable = function functionExpressionName() {
function functionExpressionName() {
}
functionExpressionName = 1;
console.log(functionExpressionName); // 1
};
functionVariable();
如果启用严格模式,错误会变得更清楚:
'use strict';
var functionVariable = function functionExpressionName() {
functionExpressionName = 1;
console.log(functionExpressionName) // function
};
functionVariable();
Uncaught TypeError: Assignment to constant variable
函数名在函数内部是un-reassignable,但是可以在函数内部创建一个new同名变量body。一种看待它的方法是在函数 body:
之外用 const
声明函数名称
var functionVariable = (() => {
const functionExpressionName = function () {
functionExpressionName = 1; // Clearly wrong - functionExpressionName is a const
// but it would work if you declared a *new* variable,
// which has a different lexical binding
console.log(functionExpressionName) // function
};
return functionExpressionName;
})();
functionVariable();
这不完全会发生什么,但非常接近。
var functionVariable = function functionExpressionName() {
functionExpressionName = 1;
console.log(functionExpressionName) // function
};
functionVariable();
如果你 运行 这个例子你可以看到我们不能重新分配给 functionExpressionName 任何东西。 但这也很有趣,我们可以重新声明 functionExpressionName 之后我们可以将任何内容分配给 functionExpressionName
var functionVariable = function functionExpressionName() {
function functionExpressionName() {
}
functionExpressionName = 1;
console.log(functionExpressionName); // 1
};
functionVariable();
如果启用严格模式,错误会变得更清楚:
'use strict';
var functionVariable = function functionExpressionName() {
functionExpressionName = 1;
console.log(functionExpressionName) // function
};
functionVariable();
Uncaught TypeError: Assignment to constant variable
函数名在函数内部是un-reassignable,但是可以在函数内部创建一个new同名变量body。一种看待它的方法是在函数 body:
之外用const
声明函数名称
var functionVariable = (() => {
const functionExpressionName = function () {
functionExpressionName = 1; // Clearly wrong - functionExpressionName is a const
// but it would work if you declared a *new* variable,
// which has a different lexical binding
console.log(functionExpressionName) // function
};
return functionExpressionName;
})();
functionVariable();
这不完全会发生什么,但非常接近。