本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精华的知识点进行了梳理. 什么是作用域 作用域是一套规则,用于确定在何处以及如何查找变量. 编译原理 JavaScript是一门编译语言.在传统编译语言的流程中,程序中一段源代码在执行之前会经历三个步骤,统称为"编译". 分词/词法分析 将字符串分解成有意义的代码块,代码块又称词法单元.比如…
作用域是什么 编译原理 分词/词法分析 这个过程会将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元 解析/语法分析 词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树(抽象语法树AST) 代码生成 将AST转换为可执行代码的过程称被称为代码生成 理解作用域 处理成员 引擎--负责代码编译和执行 编译器--词法-语法-代码生成 作用域--根据名称查找变量的一套规则 引擎查询(代码执行前) 一个赋值操作的LHS(左侧)和RHS(右侧)查询 v…
 原文:你不知道的js系列 JavaScript 的 this 机制并没有那么复杂 为什么会有 this? 在如何使用 this 之前,我们要搞清楚一个问题,为什么要使用 this. 下面的代码尝试去说明 this 的使用动机: function identify() { return this.name.toUpperCase(); } function speak() { var greeting = "Hello, I'm " + identify.call( this ); c…
划重点 本篇笔者将重点介绍JavaScript中 getOwnPropertyNames .Object.keys.for ... in 的使用及他们之间的异同点. getOwnPropertyNames Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组. 那么啥叫自身属性呢?请看下面代码段: var obj = {     a: '1',     b: '2' } var ne…
JavaScript -- 构造函数 // 构造函数 function Player(name, age) { this.name = name; this.age = age; } JavaScript -- 静态方法 // 静态方法(只可用[构造函数]名字调用,不可用[实例对象]名字调用) Player.turnover = function () { console.log('我会失误'); } Player.turnover(); curry.turnover(); // 报错 curr…
一.对象 对象可以通过两种形式定义:声明(文字)形式和构造形式.即: var myObj = { key: value // ... }; 或: var myObj = new Object(); myObj.key = value; 对象还有一些内置对象: String.Number.Boolean.Object.Function.Array.Date.RegExp.Error. 访问对象属性可以使用. 操作符(属性访问)或者[] 操作符(键访问),区别在于:于. 操作符要求属性名满足标识符的…
1 关于this 1.1 为什么使用this 随着你的使用模式越来越复杂,显式传递上下文对象会让代码变得越来越混乱,使用this则不会这样.当我们介绍对象和原型时,你就会明白函数可以自动引用合适的上下文对象有多重要. 1.2 关于误解 首先需要消除一些关于this的错误认识. 1.2.1 指向自身 先来看个例子: function foo(num) { console.log("foo: " + num); // 记录foo被调用的次数,这里this指向window this.coun…
一.语法 两种形式定义:文字形式和构造形式. //文字形式 var myObj = { key: value }; //构造形式 var myObj = new Object(); myObj.key = value; 二.类型 对象是JavaScript的基础. 1)基本类型 在JavaScript中一共有六种主要类型(术语是“语言类型”): string.number.boolean.null.undefined.object 2)内置对象 JavaScript中还有一些对象子类型,通常被称…
Javascript中的数据值有两大类:基本类型的数据值和引用类型的数据值. 基本类型的数据值有5种:null.undefined.number.boolean和string. 引用类型的数据值往大的说就1种,即Object类型.往细的说有:Object类型.Array类型.Date类型.Regexp类型.Function类型等. 当原型对象的属性值为基本类型的数据值时,通过实例对象修改属性值从而引起原型对象的属性值发生变化的情况不会发生.当原型对象的属性值为引用类型的数据值时,通过实例对象修改…
函数 函数是JavaScript中特殊的对象,对函数执行typeof运算会返回字符串"function",因为函数也是对象,他们可以拥有属性和方法. 静态方法 函数在JS中定义了类的名字,任何添加到函数的属性都是类字段和类方法(类比Java中类的static variable 和 static method),下面代码起到Java里面static method的效果: var foo = function(){}; foo.printLog = function(){ if (argu…