var f = function g() {
return 23;
};
typeof g();
为什么这里打印不了g这个函数
问题在与:
var f = function g() { return 23; }
这是一个表达式,表示给变量f一个函数对象,这里并不会创建变量g
像这样的函数声明才会创建一个变量g
var f = g;
function g() { return 23; }
通过函数表达式的方式声明的函数,如果其带有函数名称,那么名称作用域只在其定义的函数内
var f = function g() {
//能范围到g函数
console.log(type of g);//function
return 23;
};
console.log(type of g);//undefined
这里面试题考查的命名函数表达式,函数名称的作用域问题的理解:
如果你想在函数体内部引用当前函数,则需要创建一个命名函数表达式。然后函数名称将会(且只会)作为函数体(作用域内)的本地变量。这样也可以避免使用非标准的 arguments.callee 属性。
function g() {
return 23;
};
typeof g();
var g = function () {
return 23;
};
上面两种形式一样,都是把函数赋给变量g,你所写的这种声明函数方式不存在。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
你有个地方误解了:
在你将这个函数赋值给变量f后:
g这个函数其实被封存在了f里,外界是访问不到的:
如果你希望打印g这个函数,可以这么搞:
再举个例子: