我认为函数提升将不允许访问父函数产品,但是为什么不能访问全局作用域。请帮助。谢谢
const product = 'product'
function foo() {
employeeId();
var product = 'Car';
return;
function employeeId() {
//this is giving me undefined
console.log(product);
}
}
foo();
当我尝试获得产品的价值时,它给出的是不确定的。 我很困惑,不确定是什么原因导致了这个问题。
答案 0 :(得分:2)
您正在变量分配之前调用employeeId()
。当javascript运行代码时,它首先为存储在var,let和const中的所有变量分配undefined。这就是为什么您不确定。如果您在employeeId()
之后调用var product = 'Car'
,则会显示正确的值
答案 1 :(得分:0)
函数和变量将被吊起。但是请注意,只有声明会被悬挂。而分配过程将在下一阶段。因此,您正在调用尚未初始化的product
打印功能。 undefined
将因此显示。
const product = 'product'
function foo() {
//JS interpret like this for the hoisting effect
var product;
employeeId();
product = 'Car';
return;
function employeeId() {
//actually printing the variable which located inside the function
console.log(product);
}
}
foo();
另一个具有不同变量名称的测试用例
const product2 = 'product'
function foo2() {
//JS interpret like this for the hoisting effect
var product;
employeeId();
product = 'Car';
return;
function employeeId() {
//print the global variable
console.log(product2);
}
}
foo2();
答案 2 :(得分:0)
因为JS是单线程编程语言。这意味着一次只能执行一组指令!
因此您需要在employeeId()
之后调用var product = 'Car'
,然后将其返回
function foo() {
var product = 'Car';
return employeeId();
function employeeId() {
console.log(product);
}
}
foo();
答案 3 :(得分:0)
在声明阶段,内部函数中的变量和函数会被吊起,而变量var product
将在执行引擎遇到该变量并设置其值undefined
时被声明。稍后,该变量将被分配一个值“ Car”,因此在调用employeeId()
时,product
的值仍为undefined
。
请注意,全局const product = 'product'
对此不起作用。即使您使用let
或var
声明全局产品,结果也将相同。在初始化阶段,将再次在内部函数中声明var product,并将其值设置为undefined
var product = 'product' //Even if you declare this with let/const the result will be same
function foo() {
employeeId();
var product = 'Car';
return;
function employeeId() {
//this is giving me undefined
console.log(product);
}
}
foo();