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…
在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. JS的解析过程分为两个阶段:预编译期(预处理)与执行期. 预编译期JS会对代码块中的所有声明的变量和函数进行处理(类似与C语言的编译),但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值. console.log(a);//undefined if (!("a" in wind…
前段时间阿里实习生内推,一面就被刷了,也是郁闷.今天系统给发通知,大致意思就是内推环节不足以了解彼此,还可以参加笔试,于是赶紧再投一次.官网流程显示笔试时间3月31日,时间快到了,开始刷题.网上搜了一下去年题目,我擦,第一题就不会(伤心中...),继续往下看,第四题也不会...好嘛,搜答案吧.搜了一个多小时的博客,结合自己的理解,写下了这篇博文... 2014年阿里巴巴前端工程师笔试题目1: var v = "Hello world"; (function() { console.lo…
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()函数时由于变量…
预编译四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined 3.将实参和形参统一 4.在函数体里面找函数声明,值赋予函数体 function fn(a){ console.log(a) //function a(){} var a = 123; console.log(a)//123 function a(){} console.log(a)//123 var b = function(){} console.log(b) //function()…
之前一直觉会认为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…
js的变量声明: js正常的变量声明就不多讲了,形如var a=1;这样的变量声明在实际开发中最常用. var a=1,b=2;这种以逗号分隔开的一次声明多个变量,其实相当于var a=1; var b=2;每个变量声明都有var var a=b=c=2;这种连等格式的变量声明赋值,就有点特殊了.它相当于var a=2; b=2; c=2;也就是说只有第一个变量a声明时有var,其他的变量声明时都没有var js的变量提升有两方面: 1.在函数体中可以声明全局变量.一般来说,在函数.方法体中声明…
这篇随笔是对网上文章的整理吸收 1. javascript的作用域是函数,不是块 2. 在函数内部,javascript解释器会把var变量提升到当前域的最前面,但是函数体不会提升. 看下面例子: var v = "hello"; (function(){ console.log(v); // var v = "world"; })(); 输出值为 hello var v = "hello"; (function(){ console.log(v…
在ECMAScript5中没有块级作用域一说,只有函数作用域和全局作用域,在其中声明的变量和函数和其他语言的展现形式不同,在某些情况下不一定需要先定义后使用,函数和变量的使用可以在其声明之前,这到底是怎么回事呢?让我们一起揭开变量声明提前的神秘面纱!!! 一.变量声明提升 var a = 10; function test() { a = 100; alert(a); alert(this.a); var a; alert(a); } test(); 这题考的也是变量声明提升,函数作用域中提前使…
一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: console.log(global); // undefined var global = 'global'; console.log(global); // global function fn () { console.log(a); // undefined var a = 'aaa';…
js 函数和变量的提升 1. 函数的作用域: js中 ,函数的作用域为函数,而不是大括号. var hei = 123;if(true){ hei = 456;}console.log(hei);// 456; var hei = 123;if(true){ (function(){ var hei = 456;})(); }console.log(hei); // 123 函数内部可以用用函数外部的变量,而函数外部的不可以用函数内部的变量(可以用闭包实现效果,随后总结). (function(…