函数中的 var 给出 undefined [duplicate]

var inside the function giving undefined [duplicate]

提问人:zi zi 提问时间:10/27/2023 最后编辑:zi zi 更新时间:10/27/2023 访问量:45

问:

更新 1:为什么我变得不明确

我正在尝试赚取js吊装。 当我把它放在函数中时,我变得未定义,但是当我不放置任何函数时,我得到了输出。 当我使用 let I are error 在下面提供代码片段

var numOfBeers = 5;
    
function getMoreBeers() {
  console.log('I have this many beers: ' + numOfBeers); // undefined
    
  var numOfBeers = 25;
  return numOfBeers;
}
    
console.log('I now have this many beers: ' + getMoreBeers());
I have this many beers: undefined
I now have this many beers: 25
console.log('I have this many beers: ' + numOfBeers);
    
var numOfBeers = 25;
VM336:2 I have this many beers: 25
console.log('I have this many beers: ' + numOfBeers);

let numOfBeers = 25;
VM333:1 Uncaught SyntaxError: Identifier 'numOfBeers' has already been declared
JavaScript ECMAScript-6 作用域 控制台 .log

评论

1赞 Raymond Chen 10/27/2023
这回答了你的问题吗?“let”和“var”有什么区别?- 请参阅“吊装”讨论,这是一个与您的示例几乎相同的示例。
0赞 trincot 10/27/2023
在为变量赋值之前,变量是未定义的。
0赞 pilchard 10/27/2023
您正在函数中声明变量的新版本,该变量的声明将提升到调用上方,但您的赋值是在之后。等同于 .如果删除函数内部的 decaration 并仅保留赋值,则将使用在全局范围内声明的console.logfunction getMoreBeers() { var numOfBeers; console.log(...); numOfBeers = 25; }var
0赞 pilchard 10/27/2023
另请参阅: JS 提升如何在函数中工作?

答:

0赞 Mr. Polywhirl 10/27/2023 #1

因为你通过声明一个同名的内部变量来隐藏外部变量。

var numOfBeers = 5;
    
function getMoreBeers() {
  console.log('I have this many beers: ' + numOfBeers); // undefined
    
  var numOfBeers = 25; // Because you defined a local var here!
  return numOfBeers;
}
    
console.log('I now have this many beers: ' + getMoreBeers());

这里是与上面相同的代码,但变量为“hoisted”:

var numOfBeers = 5;
    
function getMoreBeers() {
  var numOfBeers; // Because you defined a local var here!

  console.log('I have this many beers: ' + numOfBeers); // undefined
    
  numOfBeers = 25; // Now we assign...
  return numOfBeers;
}
    
console.log('I now have this many beers: ' + getMoreBeers());

更改内部名称:

var numOfBeers = 5;
    
function getMoreBeers() {
  console.log('I have this many beers: ' + numOfBeers); // undefined
    
  var localNumOfBeers = 25; // Local var here!
  
  numOfBeers = localNumOfBeers; // Update the outer var
  
  return localNumOfBeers;
}
    
console.log('I now have this many beers: ' + getMoreBeers());

这将产生:

I have this many beers: 5
I now have this many beers: 25

评论

0赞 zi zi 10/27/2023
嘿,但是在函数中为什么不打印 25,因为下面的语句我们使用 ---> numOfBeers = localNumOfBeers;更新外部 var
0赞 Ruan Mendes 10/27/2023
这与影子无关,只是吊装,不是吗?删除外部变量,行为是相同的。您应该解释一下,对于提升,就好像在函数(提升)的顶部添加了一个新语句,并将函数开头的变量声明为 undefinedvar localNumOfBeers;