先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按照传统眼光,console.log(a)输出的应该是undefined,因为var a在a = 2之后.但是,输出的是2. 再看第二段代码: console.log(a); var a = 2; 有人会想到第一段代码,然后回答undefined.还有人会认为a在使用前未被声明,因此抛出Referen
在JavaScript中有三种声明变量的方式:const var let const:用于声明常量.注意:定义的变量的时候,必须同时初始化,且其值之后不可以修改. var:最常用的声明变量关键字. 定义的变量的时候,若没有初始化,不报错,会输出undefined.其值之后可以修改.var可以用来声明全局变量,也可以声明局部变量,依据它们声明的位置: 全局变量:在函数外定义的变量:(注意:若没有使用关键字声明的变量,默认为全局变量.)作用域是整个代码文件. 局部变量:在函数内定义的变量.作用域是
JS代码在执行的时候会先找出执行代码中定义的变量和函数,对其进行声明. 例1:console.log(a); var a = 4; 此时输出undefined.a变量在执行console.log(a);这条语句之前就已经被定义了只是没有赋值.实际的执行顺序是:var a ; console.log(a);a=4; 例2:var a = 3; function fn(){ console.log(a); var a = 4; } fn(); 执行输出undefined.在执行fn()函数时由于变量
if (!("a" in window)) { var a = 1; } alert(a); 结果:undefined 分析: 首先,所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1: 第二,所有的变量声明都在范围作用域的顶部,如: alert("a" in window); var a; 相当于: var a; alert("a" in window); 这是因为JavaScript引擎首先会扫墓所
1.先来看两个题 var a = 1; foo1(); function foo1(){ console.log(a); //输出1 }; foo2(); var a = 1; function foo2(){ console.log(a); //输出undefined }; 首先这两题中应该要注意的是函数声明的提升,也就是function foo1(){}会自动被提升到顶部,所以foo1()的调用是可以的.第一个输出1是毫无疑问的!那么第二个实际上被js引擎解析为: var a; foo();
var声明变量的作用域限制在其声明位置的上下文中 var x = 0; // x是全局变量,并且赋值为0. console.log(typeof z); // undefined,因为z还不存在. function a() { // 当a被调用时, var y = 2; // y被声明成函数a作用域的变量,然后赋值成2. console.log(x, y); // 0 2 function b() { // 当b被调用时, x = 3; // 全局变量x被赋值为3,不生成全局变量. y = 4;
之前一直觉会认为javascript代码执行是由上到下一行行执行的.自从看了<你不知道的JS>后发现这个观点并不完全正确.先来给大家举一个书本上的的例子: var a='hello world'; var a; console.log(a); 一开始我觉得输出的是undefined.但是真正的结果是hello world.带着疑问再看另外一段代码: console.log(a); var a='hello world'; 借鉴与上面的例子会认为会输出一个hello world,或者是抛出一
demo1: var a=10; function b(){alert(a); var a=20; alert(a)} b()//undefined 20 因为:js编译器在执行b这个函数时,会把函数中声明的变量提前到最前面进行声明:上面的函数b等同于: function b(){var a; alert(a); a=20; alert(a);} 不难看出最终的结果就是 undefined 20 demo2: var a=10; function b(){alert(a); a=20; aler
var x = 5; // 初始化 x elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x + " " + y; // 显示 x 和 y var y = 7; // 初始化 y y 输出了 undefined,这是因为变量声明 (var y) 提升了,但是初始化(y = 7) 并不会提升,所以 y 变量是一个未定义的变量. 实例 2 类似以下代码: var x = 5; // 初始化
1. 变量声明提升 先看以下代码: 1)var in_window = "a" in window; console.log(in_window); 2)var in_window = "a" in window; console.log(in_window); if(!("a" in window)) { var a = 1; } 3)var a; var in_window = "a" in window; console
参考网址:http://www.codesec.net/view/178491.html 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() { var x = 1; if (x) { var x = 2; } console.log(x); } foo(); 结果为2,可见js中并没有块级作用域的概念可以使用下面的方法创造自己的作用域,这样不会干扰到外部变量 function foo() { var x = 1; if (x) { (function()