有人请帮助我了解以下情况:
//Outer funtion function foo() { console.log('outer foo'); } { //Inner function function foo() { console.log('inner foo'); } } foo(); //Says "inner foo"
我假设在上述情况下,内部函数的显式减速是在执行块之后替换提升的外部函数。
这是否意味着ES6块仅在内部声明时阻止功能提升?
更新
许多人认为这些块并不影响功能。但是,请按照mdn查看以下场景-
foo('outside'); // TypeError: foo is not a function { function foo(location) { console.log('foo is called ' + location); } foo('inside'); // works correctly and logs 'foo is called inside' } 更准确地说,block语句阻止 从被提升到作用域顶部的声明。功能 表现得好像它被定义为一个函数表达式 因此,只有隐式变量声明才能被提升 达到最高境界
foo('outside'); // TypeError: foo is not a function { function foo(location) { console.log('foo is called ' + location); } foo('inside'); // works correctly and logs 'foo is called inside' }
更准确地说,block语句阻止 从被提升到作用域顶部的声明。功能 表现得好像它被定义为一个函数表达式 因此,只有隐式变量声明才能被提升 达到最高境界
另一个更新
文件是错误的,只是由专家提供了选定的答案。
函数声明,如 var 语句在执行函数中的代码之前,在函数的初始扫描期间被提升到函数的顶部。
var
块与吊装无关 风险价值 语句或函数声明(两者都有函数作用域)。它们只为 let 和 const 有阻塞范围的。
风险价值
let
const