js 变量预编译

js是按照顺序执行的;

但是在js中会对var和function进行预编译;

        alert(show);
        function show(){
            var a;
        }

比如以上代码,alert就会输出function。

但是对于var的预编译,刚刚是自己理解错了

如下代码,a输出都是undefined。

b会直接报错,b is not defined。

   alert(a);
   alert(b);
   var a;

汇总下要点:

1.js在页面加载过程中顺序执行。但是分块预编译、执行。 
2.JS 在执行前会进行类似"预编译"的操作,而且先预声明变量再预定义函数。 
此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行了"var a"没有赋值,即在预编译结束时a 为undefined。 
3.(注意)并不是先全文编译完在执行,而是块编译,即一个script块中,预编译再执行,然后(按顺序)下一个script块,预编译再执行,但此时上一个块中的数据都是可以用的,但下一个块中的函数,声明的变量都是不可用的。 
4.变量没声明就引用,会报错,但对象方法,对象变量没声明,是undefined 
5.在函数中变量不声明就赋值,会被认为是全局变量,用var声明后为函数变量 
6.在执行函数时时也是先编译后执行,但要注意函数定义中(即大括号中)的代码即使有错只要函数不执行,就不会有影响,但一执行函数,开始函数预编译就会出错。

时间: 2024-11-09 05:20:45

js 变量预编译的相关文章

JS的预编译和执行顺序 详析

原文:JS的预编译和执行顺序 详析 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题   代码:   复制代码 代码一 <html>   <head>     <title>事件处理</title>     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>

js的预编译机制

1.var定义的是“当前作用域下的一个变量”,当在函数内部不使用var声明时,会被当做全局变量而不是函数内的局部变量(严格模式下还会报错) 2.js的预编辑:[对定义式函数]直接创建为作用域上的函数变量,并将其值初始化为定义的函数代码逻辑,也就是为其建立了可调用的函数变量. 3.js的预编辑:[对var定义的变量] 会在开始先全部找出来,并且将初始值设为undefined 4.[对上面代码的解释]:第一个yourname是undefined:在js开始解析时获得了第一行的yourname声明和函

JS的预编译和执行顺序 详析(及全局与局部变量)

最近在复习javascript的事件处理时发现了一个问题,于是总结一下:javascript的预编译和执行顺序的问题:   <html> <head> <title>事件处理</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <script type='text/javascript'> //页

js的预编译

js执行的三步:语法检查,预编译,解释执行. js预编译前:window对象==全局 1.任何位置上的变量未声明直接赋值是全局变量,发到window里 2.在函数外声明的变量也是全局,放到window里. js预编译时:对函数来说 1.生成函数的AO对象(作用域) 2.把函数的形参和变量声明放到AO对象中,作为属性 3.形参和实参相对应(实参的值传给形参) 4.把函数声明的函数名放到AO对象里,作为属性 js预编译结束后,进行解释执行,执行时,变量和函数的声明不执行 原文地址:https://w

js的预编译、全局变量、局部变量相关知识

1.未声明的变量就赋值, 此变量归全局变量window对象所有 console.log(a); //a is not defined a=10 console.log(a); //10 等价于 console.log(window.a) function test(){ var a = b = 123; } test(); console.log(b) //123 b未声明就赋值归为window对象所有, 等价于console.log(window.b); console.log(a) //a

JS函数/预编译

一.函数: 1.函数声明: function test() {}; 2.函数表达式: var test=function () {}; 3.参数: function test(a,b) {        //a,b形参 //var a; //var b; var c=a+b; document.write(c); } test(1,2);       //1,2实参 4.实参列表: arguments[]; 二.预编译: 1.预编译: (1) 创建AO对象:(全局创建的为GO===window)

js 预编译环节的变量提升

有些东西需要先告诉你怎么用,再去理解定义 关于变量的提升 function test () { console.log(a) var a = 100 console.log(a) }; test () // undefined // 100 执行步骤 function test () { var a = undefined console.log(a) a = 100 console.log(a) } 关于函数的提升 function test () { console.log(a) funct

Js 预编译

开始 所有的测试,都是chrome浏览器. js本身是脚本语言,可以不经过编译直接运行,但是在进入每一个<script>标签,或者js文件的时候,这样的情况下,浏览器会给js一个预编译的过程. 这样就有必要讨论一下预编译了. 解析的状态是首先引入一个代码段,也就是之前提到的标签或者文件.读入整个代码段,进行解析,解析的方式是遇到变量就声明, 对变量声明为undefined,对函数做标记,这个就是预解析,但是如果声明了同名的函数,使用最后一个.变量都是undefied,只有触发的时候,才会激活.

JavaScript 预编译(变量提升和函数提升的原理)

本文部分内容转自https://www.cnblogs.com/CBDoctor/p/3745246.html 1.变量提升 1 console.log(global); // undefined 2 var global = 'global'; 3 console.log(global); // global 4 5 function fn () { 6 console.log(a); // undefined 7 var a = 'aaa'; 8 console.log(a); // aaa