看一下JavaScript预解释
用var关键字进行预解释。
让我们首先看看这段代码的执行结果:
复制代码如下: alert(n);//弹出undefinedvar n=10
弹出结果未定义,为什么不是10?让我们看看以下代码执行的结果:
复制代码如下: alert(n);n=10
运行以下错误:
这次报告错误的原因是代码运行时没有声明变量n。通过比较这两个代码,我们发现用var关键字声明的变量和不用var关键字声明的变量是有区别的。在代码执行之前,浏览器似乎给了它们一个未定义的初始值。因此,浏览器引擎在执行代码之前自动扫描用var关键字和function关键字(后面会提到)声明的变量和定义的函数的过程称为预解释。
带函数关键字的预解释。
让我们看看以下代码执行的结果:
复制代码如下: fn();//hello function fn(){ alert(' hello ')弹出;}
执行结果弹出你好,fn可以正常执行,因为fn在代码执行之前已经预解释过了,预解释的时候已经定义了fn。我们还有一个问题,为什么第一段代码的执行结果没有弹出10,而是未定义,又引入了另一个概念,JavaScript中的声明和定义。
用JavaScript声明和定义。
我们通常用var键声明变量,用function关键字定义函数,但是function关键字同时声明和定义函数,而var只能声明变量,不具备定义的功能。
以下变量用var关键字声明:
复制代码如下: var n;//声明了一个变量nvar m=10//声明了一个变量m,并为其赋值10。
以下函数是用function关键字定义的:
以下://复制代码定义了一个函数fn function fn(){ alert(' hello ');}
var关键字预解释与函数关键字预解释的区别。
事实上,它们之间的区别在于,在预解释关键字var时,只有声明部分是预解释的(因为它没有定义自身的能力),而在预解释声明和定义时,关键字函数是预解释的。此时,我们将返回并分析第一个代码,分析如下:
没有道德操守的预先解释。
为什么说它没有节操,请看下面的代码(火狐除外):
复制代码如下: alert(n);fn();if(false){ var n=10;函数fn(){ alert(' hello ');}}
执行第一行代码时弹出Undefined,hello执行第二行代码时弹出。因为n和fn是在代码执行之前预先解释的,所以即使if条件被判断为false,持久化浏览器引擎也会用var关键字声明扫描变量n,用功能键定义扫描fn。
*预解释忽略了重新声明,而不是重新定义。
这个地方比较圆,不太好理解,所以加了一个星号。请参见以下代码:
复制代码如下: alert(n);var n=10var n=9;var n;警报(n);
这段代码的执行结果是什么,我们来分析一下:
继续代码,请分析以下执行结果:
复制代码如下: fn();函数fn(){ alert(' 1 ');} fn();函数fn(){ alert(' 2 ');} fn();代码分析图如下:
用函数定义对函数进行预解释分析。
总结:
这篇博文使用了大量的代码和截图来总结JavaScript中的预解释。纵观各种书籍,对预释的描述很少。其实平时工作中用到的场景并不多。不幸的是,对于大公司的面试问题,预解读是必须的。刚接触它的时候,感觉它总是不按常理出牌写代码,但有时候工作正常,不报错。当然,这也增加了我们对其奥秘的探索,让我们进一步了解浏览器引擎是如何解释和执行我们的代码的。在此,在接下来的博文中,我将拿几个经典案例进行全面分析,再次感谢大家的支持!
版权声明:看一下JavaScript预解释是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。