JavaScript中“提升”的原因
这篇文章将为大家详细讲解有关JavaScript 中“提升”的原因,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联2013年开创至今,先为泸水等服务建站,泸水等地企业,进行企业商务咨询服务。为泸水企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
在执行JavaScript代码之前,js引擎首先会对其进行解析和编译。在编译阶段,变量和函数声明被放入内存,这被称为提升(hoisting)。
需要注意的是,声明只是被提升,而不是被初始化,这意味着如果一个变量在使用后被声明并初始化,则不会初始化它的值。
function
使用 function 声明时,可以在定义之前调用这个函数,它会按预期正常工作。例如:
hello(); // 输出 'Hello world!' function hello() { console.log('Hello world!'); } hello(); // 输出 'Hello world!'
在上面的例子中, function 声明被提升到其作用域的顶部,并且由于函数声明的性质,在声明之前就可用。不过这是函数提升行为的唯一案例。
var
另一方面,var 声明的行为有所不同,在其初始化之前进行访问会返回 undefined。例如:
console.log(x); // 输出 'undefined' f(); // 抛出异常:'Uncaught TypeError: f is not a function' var x = 1; var f = () => 'Hi!'; console.log(x); // 输出 '1' f(); // 返回 'Hi!'
正如你在这个例子中所看到的,var 声明被提升到它作用域的顶部,但是变量的值只有在初始化代码被执行时才会初始化,所以在初始化这行代码之前是 undefined。
const 和 let
const 和 let 声明被提升,但它们没有被初始化为 undefined。而是会给你一个错误,这也是 class 声明的行为方式。例如:
console.log(y); // 抛出异常: 'Uncaught ReferenceError: Cannot access "y" before initialization' g(); // 抛出异常: 'Uncaught ReferenceError: Cannot access "g" before initialization' let y = 2; const g = () => 'Hey!'; console.log(y); // 输出 '2' f(); // 返回 'Hey!'
一般情况下,在初始化之前访问用 var 声明的变量会默默地失败,对 const 或 let做同样的事情会导致一个清晰的、易于调试的错误。
总结
在使用变量、函数、对象和类之前,务必要先定义它们。ESLint 可能可以帮你解决这个问题。
在项目中要尽可能的使用 const 和 let,而不是 var 。这样可以减少很多麻烦。
如果可能的话,只使用箭头函数或 function 声明。一致性有助于减少混乱。
关于“JavaScript 中“提升”的原因”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
文章标题:JavaScript中“提升”的原因
网站URL:http://pwwzsj.com/article/ijsegj.html