js中的变量提升

在js中 变量声明与赋值被认为是两个不同的操作,引擎首先会对前者进行优先编译,这部分工作就是找到所有的声明(例如函数声明function b(注:非函数表达式),变量声明var a),既然是优先执行,那么在一些代码结构中,后声明的function,var 变量就会提前解释;

例如 var a=3;引擎会认为这是两个操作  var a(声明); a=3(赋值),简而言之就是 先有蛋 后有鸡,

理解了这一点 这就很好解释如下的代码结构及其输出

a=2;
var a; //定义声明提升
console.log(a) //得到2

-------------------分割线-------------------

console.log( a );//得到undefined
var a = 2; //等效于var a;//定义声明置顶               a=2;

-------------------分割线-------------------

foo();  //得到666

function(){

console.log(666)

}

-------------------分割线-------------------

foo();  //报错 信息为 Uncaught TypeError: foo is not a function,因为此时 foo为undefined,而不是一个函数

var foo = function(){

console.log(6666)

}

原文地址:https://www.cnblogs.com/tony-stark/p/11619254.html

时间: 2024-10-07 17:11:25

js中的变量提升的相关文章

js中的变量提升和函数提升

1在js中只有两种作用域 a:全局作用域 b:函数作用域 在ES6之前,js是没有块级作用域. 首先来解释一下什么是没有块级作用域? 所以此时 是可以打印输出变量a的值. 2:什么是变量提升? 在我们的js中,代码的执行时分两步走的,1.解析 2.一步一步执行 那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去. 那么上面这种写法其实等价于下面这种写法: 看几个例子: 把上面的例子稍作改动: 结果就会大不一样, 再看一个例

js中的变量提升与函数提升

先看看一个简单的代码 var str='Hello World'; alert(str);//弹出 Hello World 再看一段代码: var v='Hello World'; (function(){ alert(v); })() //和我们预期的一样,还是弹出 Hello World 那么铺垫完了,继续coding var str='Hello World'; (function(){ alert(str); var str='I love coding...'; })() //出乎我们

js中的变量提升,运算符详解及计算机的进制

变量提升 凡是存到存储空间的变量(用var声明的变量)都有提升的功能.再没有赋值之前就可以使用这个变量,只不过值是undefined.. 运算符 =  赋值运算  var a=5: 把数字5赋值给变量a == 双等号  等于判断  返回的是true和false 主要用于判断 + 加法运算 -减法运算 * 乘法运算 /除法运算 % 取模(求余) ++ 自增每次加一 A++ 先使用变量a用完之后再加1 ++a 先让a加1然后再使用变量a -- A--  先使用变量a再自减1 --a  先自减1 再使

JS中的变量和输入输出

一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button> >>> 不符合w3c关于内容与行为分离的要求 2.在HTML页面中使用<script></script>包裹JS代码 <script type="text/javascript"> //JS代码 </script>

JavaScript入门:003—JS中的变量

编程语言都是相同的,JS中也是有变量的.首先JS的变量是区分大小写的,这个需要注意,比如number和Number是不同的变量.不管是常用类型的,还是对象类型,比如 Object obj和Object Obj是两个对象.然后是对变量赋值,这个基本都一样,可以先声明再赋值, var i; i=0; 也可以声明时赋值, var i=2; 而变量如果你不重新赋值,它是不会改变的,比如 var i=2: var i; 因为i没有重新赋值,所以i还是2.而对于对象变量则比较有意思,不需要向那些java,c

JS中的变量及注意点

参考: http://www.blogjava.net/baoyaer/articles/105921.html http://zhidao.baidu.com/link?url=8swl8GsS3UlFcNqxXBPI0LdpIzKx0WSxP-idnhA9oCZElLY8NMwAsiIljfyRuzp0lrBeX72SoufdDUOHc0r5D_ 程序: function printVar(v){ document.write(v+ '<br>'); } printVar("**

js 作用域,变量提升

先看下面一段代码: 1 var a = 0; 2 alert("1st alert : a = " + a); 3 function fun(){ 4 alert("2nd alert : a = " + a); 5 var a = 1; 6 setTimeout(function(){ 7 alert("3rd alert : a = " + a); 8 a = 2; 9 },1000); 10 a = 3; 11 setTimeout(fun

JS中的声明提升问题

我们习惯将 var a = 2; 看作一个声明,而实际上JavaScript引擎并不这么认为.他将 var a 和 a = 2 当作两个单独的声明,第一个是编译阶段的任务,第二个则是执行阶段的任务. --<你不知道的Js> 变量提升 变量提升的概念已经为大家所熟知,简单来讲就是在代码执行前编译器会将变量的声明提升至其所在作用域(不是全局作用域)的顶端.但在这过程中还有一些细节需要注意.比如赋值与声明提升的先后关系.先看一个例子. 由于存在变量声明提升,对 a 的声明已经提升至最前,这里打印变量

JS中的变量和数据类型

所谓变量,就是里面存储的数据是可以改变的. 在使用变量之前,我们需要先声明变量.声明变量的关键字有var  let   const 在ES里面声明变量可以使用var,如下: //var 变量名 var i; 如果声明了一个变量,但是没有给该变量赋值,那么该变量默认的值为undefined var i; console.log(i); //undefined 初始化 所谓初始化,就是给变量进行第一次赋值 var i; i=5;//初始化 console.log(i); 变量的声明和初始化是可以同时