函数内的 var 给出未定义的[重复]

问题描述 投票:0回答:1

更新1:为什么我变得未定义

我正在努力赚取js提升。 当我将它放入函数中时,我得到了未定义的结果,但是当我不放入任何函数时,我得到了输出。 当我使用 let 时出现错误 提供下面的代码片段

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 scope console.log
1个回答
0
投票

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

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

更改内部名称:

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
© www.soinside.com 2019 - 2024. All rights reserved.