“提升是 JavaScript 中的行为,其中所有变量和函数声明在代码执行之前的编译阶段移至包含范围的顶部”
您可能到处都遇到过这个定义,但“所有变量和函数声明实际上都位于代码顶部,这是一个神话”,这是不正确的!
但是,在提升所有变量和函数声明时,在编译中的代码执行之前已经分配了内存,并准确地保留在我们键入它们的位置。
那么 var/let/const 和函数是如何提升的。
以下是一些示例:
console.log(a) // undefined console.log(b) // ReferenceError console.log(c) // ReferenceError var a = 10; let b = 20; const c = 30;
使用 var 声明的变量将被提升,并在编译期间将 var 变量分配到内存中,其值未定义,这就是为什么当我们在声明之前控制台 var 时我们得到 undefined
使用 const/let 声明的变量也会被提升,但不会使用 undefined 进行初始化。我们不能在声明之前访问它们,否则我们会收到引用错误。这是因为临时死区,即变量存在但未初始化的时间。
但是功能呢
这取决于我们如何声明我们的函数。见下文。
greet1(); greet2(); greet3(); greet4(); //function declaration is full hoisted function greet1(){ console.log("greet1"); } // TypeError: greet2 is not a function var greet2 = function(){ console.log("greet2"); } // ReferenceError: Cannot access 'greet3' before initialization let greet3 = function(){ console.log("greet2"); } // ReferenceError: Cannot access 'greet4' before initialization const greet4 = function(){ console.log("greet2"); }
传统函数声明被完全提升,意味着我们可以在整个代码中调用它。
但是对于函数表达式,我们无法在它被声明之前得到它。这就是为什么用变量声明的三个函数会给我们带来错误。所以我们有两个选择,要么将函数表达式更改为函数声明,要么在声明后调用函数。
以上是在 JavaScript 中提升?的详细内容。更多信息请关注PHP中文网其他相关文章!