写在前面 注:这个系列是本人对js知识的一些梳理,其中不少内容来自书籍:Javascript高级程序设计第三版和JavaScript权威指南第六版,感谢它们的作者和译者.有发现什么问题的,欢迎留言指出. 1.执行环境 执行环境简称"环境",定义了变量或函数有权访问的其他数据.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境是最外围的一个执行环境.在Web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为wi…
攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法直观的告诉你闭包在实际开发中的无处不在,但是我可以告诉你,前端面试,必问闭包.面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上. 可是为什么,闭包如此重要,还是有那么多人没有搞清楚呢?是因为大家不愿意学习吗?还真不是,而是我们通过搜索找到的大部分…
JS详细图解作用域链与闭包 攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法直观的告诉你闭包在实际开发中的无处不在,但是我可以告诉你,前端面试,必问闭包.面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上. 可是为什么,闭包如此重要,还是有那么多人没有搞清楚呢?是因为大家不愿意学习吗?还真不是,…
在之前我们根绝对象的原型说过了js的原型链,那么同样的js 万物皆对象,函数也同样存在这么一个链式的关系,就是函数的作用域链 作用域链 首先先来回顾一下之前讲到的原型链的寻找机制,就是实例会先从本身开始找,没有的话会一级一级的网上翻,直到顶端没有就会报一个undefined 同样的js的机制就是这样的,函数在执行的时候会先函数本身的上下文的变量对象中查找,没有的话,也会从这个函数被创建的时候的父级的执行上下文的变量对象中去找(词法环境),一直找到全局上下文的变量对象(比如客户端的window对象…
javascript高级程序设计中:对执行环境.作用域链.变量对象.活动对象的解释: 1.执行环境: 执行环境:有时也叫环境:是JavaScript中最为重要的一个概念:执行环境定义了变量或函数有权访问的其他数据: 2.变量对象: 每一个执行环境都有一个与之关联的变量对象:环境中定义的所有的变量和函数都保存在这个的对象中: 3.作用域链: 代码在环境中执行时:会创建变量对象的作用域链:保证对执行环境有权访问的所有变量和函数的有序访问:作用域链的前端:始终是当前执行代码所在环境的变量对象: 4.活…
一.作用域 全局作用域和函数作用域(局部作用域). 一个变量的作用域就是源代码中定义这个变量的区域. 二.作用域链和闭包 全局变量只有一个(window,globel),全局环境下每一个函数都会形成一个局部作用域.而 “函数的嵌套会形成一个个局部作用域嵌套着其余他一个个局部作用域”.这种 嵌套关系就是我理解的作用域链: 基于词法作用域的规则,函数定义 时的作用域链到函数执行的时候依然有效. 所以越嵌套到局部作用域中 的局部作用域中变量,需要从自身作用域开始,寻找变量的申明,如果没有,会顺着局部作…
参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p/32042645 Javascript 是一种单线程编程语言,这意味着它只有一个调用栈,call Stack(调用栈 ,,先入后出) 核心:对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This js原型链? 定义 原型对象也是简单的对象并且可以拥有它们自…
写在前面 注:这个系列是本人对js知识的一些梳理,其中不少内容来自书籍:Javascript高级程序设计第三版和JavaScript权威指南第六版,感谢它们的作者和译者.有发现什么问题的,欢迎留言指出. 1.函数声明和函数表达式 函数声明具有声明提前/声明提升的特性,这一点和变量的声明特性相似,执行代码之前会先读取函数声明和变量声明,意味着可以把函数声明放在调用它的语句后面,但变量声明肯定最好不要这样,因为常伴随undefined问题. 函数声明的函数名称和函数体都提前,而函数表达式只是变量声明…
function fun(n,o) { console.log(o) return { fun:function(m){ return fun(m,n); } }; } ); a.fun(); a.fun(); a.fun();//undefined,?,?,? ).fun().fun().fun();//undefined,?,?,? ).fun(); c.fun(); c.fun();//undefined,?,?,? //问:三行a,b,c的输出分别是什么? 这是一道非常典型的JS闭包问题…
隐式类型转换 调用Number()当有运算符(加减乘除,求余)时,会调用Number()转为数字再运算,除了 加 当 有字符串时就变身成拼接Boolean();String(); typeof()string返回的类型 预编译 在<script>里面的代码,进行预编译,将变量声明,,函数声明提高在逻辑的前面;执行代码时在GO(即window对象)中取出值,var a = 1;function text(){}例如 Go{ a : undefined; text : function(){}}当…