JavaScript笔记——函数、变量的提升

来源:互联网 发布:java io read write 编辑:程序博客网 时间:2024/06/05 16:06

我们都习惯程序从顶往下执行,但是有些时候,看着 JavaScript 中有些程序,变量或者声明放在后面,然而调用这些变量却放在声明之前。程序也能执行成功,不仅让我怀疑“先定义,再调用”这定理!!!这是怎么回事呢?查阅一些博客与解答后,才知道 JavaScript 解析器其实比较聪明,它能帮我们自动提升变量或者函数声明,具体的一些说明,整理如下:

  • JavaScript 会将函数声明和变量声明提升到当前作用域的顶部
  • 变量赋值不会提升
  • 函数表达式不会提升,因为它们涉及变量赋值,只有变量声明会提升。在解析器在脚本中到达该表达式之前,函数表达式不会加载

通过例子来说明吧!

下面这个例子,能说明文章开头的第一,第二点。
这里强调的是定义,而不是初始化,看一下下面这个例子:

// Outputs: undefinedconsole.log(declaredLater);var declaredLater = "Now it's defined!";//Outputs: "Now it's defined!"console.log(declaredLater);

基本上,JavaScript解释器找到所有的变量声明提升到顶部。这意味着上面的例子相当于:

var declaredLater;// Outputs: undefinedconsole.log(declaredLater);declaredLater = "Now it's defined!";// Outputs: "Now it's defined!"console.log(declaredLater);

下面我们来看看,这个能说明第三点的例子:

// Outputs: "Definition hoisted!"definitionHoisted();// TypeError: undefined is not a functiondefinitionNotHoisted();function definitionHoisted() {    console.log("Definition hoisted!");}var definitionNotHoisted = function () {    console.log("Definition not hoisted!");};

可以看出来,被提升的只是函数,函数表达式并没有被提升。

我习惯先用变量或函数要:先初始化,再使用。虽然了解 JavaScript 有提升的作用,我觉得这样能增加程序的可读性,也给他人提供方便。

大家如果发现有何处是错误的,请留言告诉我,告诉我我有多傻。我会很高兴的纠正任何一个错误。祝你好运!

1 0
原创粉丝点击