javascript(面向对象,作用域,闭包,设计模式等) 1. 常用js类定义的方法有哪些? 参考答案:主要有构造函数原型和对象创建两种方法.原型法是通用老方法,对象创建是ES5推荐使用的方法.目前来看,原型法更普遍. 代码演示1) 构造函数方法定义类 function Person(){ this.name = 'michaelqin'; } Person.prototype.sayName = function(){ alert(this.name); } var person = new…
首先强烈安利<你不知道的JavaScript>,JS初学者进阶必读. 对于从C++.Java等静态语言转向JavaScript的初学者(比如我)来说,JS一些与众不同而又十分要紧的特性使得它显得十分诡异而难以捉摸,为此必须下一番大力气,一边啃书一边实践将这些概念彻底搞懂,然后才谈得上进一步学习前端姿势.(注:本文里的JS以ECMAScript 5(ES5)为准,ES6的新特性我也是刚刚接触,希望今后能与大家一起学习探讨.) 熟悉Java的童鞋在初学JS时,必须要牢记一点: JS中没有块级作用域…
一.闭包 JavaScript中允许嵌套函数,允许函数用作数据(可以把函数赋值给变量,存储在对象属性中,存储在数组元素中),并且使用词法作用域,这些因素相互交互,创造了惊人的,强大的闭包效果.[update20170501] 闭包就是指有权访问 另一个函数作用域 中的变量 的函数 !!! 好处:灵活方便,可封装 缺点:空间浪费.内存泄露.性能消耗 由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存.过度使用闭包可能会导致内存占用过多,建议只在绝对必要时再考虑使用闭包.虽然像V8等…
例题如下: for (var i = 0; i < 3; i++) {     setTimeout(function() {         console.log(i);     }, 0);     console.log(i); } 结果是:0 1 2 3 3 3很多公司面试都爱出这道题,此题考察的知识点还是蛮多的.为了防止初学者栽在此问题上,此文稍微分析一下.都考察了那些知识点呢?异步.作用域.闭包,你没听错,是闭包.我们来简化此题: setTimeout(function() { …
编译原理 JavaScript事实上是一门编译语言,但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植. 任何JavaScript代码片段在执行前都要进行编译(通常就在执行前). 在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为“”编译“”. 1.分词/词法分析(Tokenizing/Lexing) 将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元. 分词(tokenizing)和词法分析(lexing)之…
1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域. 如前述,JS的在函数中定义的局部变量只对这个函数内部可见,称之谓函数作用域. 嵌套作用域变量搜索规则:当在函数中引用一个变量时,JS会搜索当前函数作用域,如果没有找到则搜索其上层作用域,一直到全局作用域. [javascript] view plaincopyprint? var  value = 'global';  v…
相信绝大多数同学都听过闭包这个概念,但闭包具体是什么估计很少有人能够说的很详细.说实话闭包在我们平时开发中应该是很常见的,并且在前端面试中闭包也是常见的重要考点,在学习闭包之前我们先来看看作用域与作用域链,因为这是闭包的关键. 作用域 简单来说,作用域是指程序中定义变量的区域,它决定了当前执行代码对变量的访问权限 在ES5中,一般只有两种作用域类型: 全局作用域:全局作用域作为程序的最外层作用域,一直存在 函数作用域:函数作用域只有在函数被定义时才会被创建,包含在父级函数作用域或全局作用域中 说…
<script type="text/javascript"> function fn() { var i = 10; return function (n) { console.log(n + (++i)) } } var f = fn();//首先把fn执行,然后把执行的结果赋值给f,函数执行只要看函数里面有没有return f(10);//10+11=21; f(20);//20+12=32; fn()(10);//10+11=21 fn()(20)//20+11=3…
第一部分 作用域与闭包 第一章 作用域是什么 1.作用域 变量赋值操作会执行两个动作:首先编译器会在当前作用域中声明一个变量(如果之前没有声明过), 然后会在运行时引擎会在作用域中查找该变量,找到就会对他赋值. 2.理解LHS和RHS操作赋值 简单来说  LHS:查找的目的是进行变量赋值,使用LHS查询[存] RHS:目的是获取变量的值,就会用RHS[取] 3.JavaScript编译原理   例如var a=2会被拆分为 var a在其作用域中声名新变量:a = 2会查询变量a并且对它赋值 4…
javascript作用域和闭包之我见 看了<你不知道的JavaScript(上卷)>的第一部分--作用域和闭包,感受颇深,遂写一篇读书笔记加深印象.路过的大牛欢迎指点,对这方面不懂的同学请绕道看书,以免误人子弟... 看过这本书的可以一起交流交流. 编译过程 理解js作用域首先要了解js的编译过程(或者说解析过程). 引擎 从头到尾负责整个 JavaScript 程序的编译及执行过程. 编译器 引擎的好朋友之一,负责语法分析及代码生成等脏活累活(详见前一节的内容). 作用域 引擎的另一位好朋…