vars 变量预解析

JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于JavaScript,只要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。看下面这个例子:

JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于JavaScript,只要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。看下面这个例子:

myname="global";//全局变量
function func(){
alert(myname);//"underfined"
var myname="local";
alert(myname);//"local"
}

时间: 2024-12-28 08:24:40

vars 变量预解析的相关文章

0143 JavaScript预解析:概念、变量预解析、函数预解析、函数表达式声明函数问题

4.1 预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的. JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析 和 代码执行. 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义. [提升到当前作用域的最顶部.] 代码执行: 从上到下执行JS语句. 预解析会把变量和函数的声明在代码执行之前执行完成.[声明提前,赋值留在原地.] 4.

JavaScript的变量预解析特性

JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢?事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了解到,JavaScript有“预解析”行为.理解这一特性是很重要的,不然在实际开发中你可能会遇到很多无从解析的问题,甚至导致程序bug的存在.为了解析这一现象,也作为自己的一次学习总结,本文逐步引导你来认识JavaScript“预解析”,如果我的见解有误,还望指正.池州市贲生工艺品 我们先来看一个例子: var la

JS变量、作用域、 内存(含 预解析面试题)

一.变量 1. 变量 命名: 变量名以$.字母.下划线开头 驼峰命名法 变量名要有意义 2. 变量 声明 声明多个变量:var message, name, age; 重复声明无效,只看第一次声明[特殊:函数内形参 与 函数内的函数名(函数声明方式创建的函数) 重名,以函数名声明为准] <script> console.log(typeof a); function a() {} var a = 10; </script> // 输出:function <script>

函数和变量中的预解析

1.js引擎运行 js 分为两步,预解析   代码执行 (1)预解析 js 引擎会把 js 里面的所有的 var 还有 function 提升到当前作用域的最前面 (2)代码执行 按照代码书写的顺序 从上往下执行 2.预解析分为 变量预解析(变量提升) 和 函数预解析 (函数提升) (1)变量提升 就是把所有的变量声明提升到当前的作用域最前面   不提升赋值操作 (2)函数提升  就是把所有的函数声明提升到当前作用域的最前面  不调用函数 案例1:(变量提升) console.log(num);

作用域,预解析,对象,内置方法 Math Date Array

作用域 一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字(变量)的可用性的代码范围,就是这个名字的作用域,作用域提高了逻辑程序的局部性,增强了可靠性,减少了名字冲突: JavaScript作用域(es6)之前:全局作用域,局部作用域 全局作用域:整个script标签或者是一个单独的JS文件 局部作用域(函数作用域):在函数内部就是作用域: 变量作用域 全局变量:在全局作用域下声明的变量:如果在函数内部没有声明(var)直接赋值的变量也是全局变量 num = 2; 局部变量:在函数内部

javascript的预解析与变量提升

JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了解到,JavaScript有“预解析”行为.理解这一特性是很重要的,不然在实际开发中你可能会遇到很多无从解析的问题,甚至导致程序bug的存在.为了解析这一现象,也作为自己的一次学习总结,本文逐步引导你来认识JavaScript“预解析”,如果我的见解有误,还望指正. (1)如果JavaScript仅是运行时自上往下

关于js语法中的一些难点(预解析,变量提前,作用域)

******标题很吓人************ 其实就是一个小例子 ,从例子中浅析 这些知识点 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>关于js中的那些小知识点</title> </head> <body> </body> <script> var a=1; function zero

js最基础知识回顾6(变量,预解析,引用,索引)

一.变量 1. 作用域:全局.局部.闭包 2. var a=12;   不加var,会变成全局变量. 3. 全局变量:容易重名,影响性能 4. 局部变量和全局变量重名,局部会屏蔽全局. 5. 给window加东西,是全局的.用途:把封闭空间的东西,变成全局. (function(){ window.a=12; alert(a); })() 二.预解析 1. 系统会把所有变量的声明,放在最上面.只是声明到上面,赋值还在原来的位置. 2. 预解析的作用域:不会脱离原本的作用域.函数中,变量放在函数最

js 函数 /变量/ 以及函数中形参的预解析的顺序

//js 解析分为两个阶段:预编译和执行期 //预编译:声明但是没有初始化 //声明式:funcion a(){} //赋值式:var a = function(){} //匿名函数:function(){} //-----函数之间比较 //结论 1 同一个函数声明,后来者居上 //结论 2 声明式函数要提前赋值式函数 //-----函数和变量的比较 //结论 3 函数声明提升优先级大于变量声明 函数声明要覆盖变量声明 console.log(f1)//打印的是函数 f1() //2 funct