1
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();
4

1 回答 1

3

如果启用严格模式,错误会变得更清楚一些:

'use strict';
var functionVariable = function functionExpressionName() {
    functionExpressionName = 1;
    console.log(functionExpressionName) // function
};

functionVariable();

未捕获的 TypeError:分配给常量变量

函数名在函数内部是不可重新分配的,但您可以在函数体内创建一个同名的新变量。一种看待它的方法是,函数名是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();

这不是完全发生的事情,但它非常接近。

于 2019-08-17T09:14:27.280 回答