Javascript之hoisting变量提升】的更多相关文章

javascript不仅仅是一门弱类型语言,还是一门解释型语言.一门编程语言的本质就是这样,优点即是缺点,缺点也往往是优点.JS因为有了变量提升,能够使我们在编程时可以忽略“先声明,再使用”的规则,但也正是JS变量提升的存在,使得我们编程时一不留神就掉进了陷阱. 先来看一段代码: a="test"; var a; console.log(a); 按理说应该输出Undefined,但是结果却是:“test”. 实际上js代码在执行的整个过程中是有所谓的编译期,只不过这个编译期很短暂,但却…
下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么下面这个呢? var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 结果是1. 吓你一跳吧?发生了什么事情?这可能是陌生的,危险的,迷惑的,同样事实上也是非常有用和印象深刻的javascript语言特性.…
1. 看人家举的两个例子,我认为这里的判断是否定义: !var 其实就是 指是否在函数function里面定义了.只有在funciton里面定义了了,js才hoist到最上面去找这个变量的值,否则就按照你自己在函数里定义的规则来了. [转载请注明来自: http://blog.csdn.NET/sunxing007] 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar();…
在很多面试题中,经常会看到关于变量提升,还有函数提升的题目,所以我就写一篇自己理解之后的随笔,方便之后的查阅和复习. 首先举个例子 foo();//undefined function foo(){ console.log(a);//undefined var a = 10; } 上面的例子中,foo()函数的声明在调用之后,但是还是会输出函数中的结果.在foo()函数的内部,变量a的声明之前就调用了,但是系统会输出undefined,而不会报错,这里面就涉及到了变量提升还有函数提升,为什么会出…
1.什么是变量提升 所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体(作用域)的最顶部. //先声明后使用 var x; console.log(x);// undefined //先试用后声明 console.log(y);// undefined var y; //上面的式子可以写成下面的样子 变量提升:把x,y提升到顶部 var x; var y; console.log(x); console.log(y); ①变量的使用有两种形式,先声明再使用或…
在EcmaScript5中只有全局作用域和函数作用域,EcmaScript6增加了块级作用域. 块级作用域(一对花括号{}即为一个块级作用域) 变量提升 console.log(name); //undefined var name = "Hello JoeXin!"; console.log(name); //Hello JoeXin! function f() { console.log(name); //undefined var name = "JoeXin"…
本文是这篇文章的简单翻译. 如果按照下面的代码按照JavaScript程序的执行方式执行,alert函数会显示什么? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 你可能会吃惊于答案是10,而下面这个很可能让你迷糊: var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 在这,浏览器会显示1…
1,随笔由来 第一天开通博客,用于监督自己学习以及分享一点点浅见,不出意外的话,应该是一周一更或者一周两更.  此博客所写内容主要为前端工作中遇上的一些问题以及常见问题,在此基础上略微发表自己的一点浅见,如有出现错误,请看到的各位能够不吝赐教,此致谢意. 前几天在某技术群中水的正欢,忽然有群友提出了一个问题,虽然不难,卻是常人忽视的点,且出现次数较多,所以在此写一点东西,提醒一下自己. 2,JavaScript中的var 与 function 首先我们来看下面这个demo var f = fun…
原谅链接:http://www.cnblogs.com/damonlan/archive/2012/07/01/2553425.html 因为这个问题很是经典,而且容易出错,所以在介绍一次.哈哈.莫怪哦. 一.案发现场 我们先看一段很简单的代码: var v='Hello World'; alert(v); 这个没有疑问吧,弹出“Hello World”.OK,我们继续. 我们在看一段Code: var v='Hello World'; (function(){ alert(v); })() 经…
1.首先理解函数作用域 在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的.也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的.而如果该变量是定义在if 或者for这样的代码块中,它在代码块之外是可见的.另外,在JavaScript中,术语"全局变量"指的是定义在所有函数之外的变量,与之相对的是"局部变量",所指的是在某个函数中的变量.其中,函数内的代码可以像访问自己的局部变量那样访问全局变量,反之则不行.…