JavaScript忍者秘籍——闭包】的更多相关文章

概要:本篇博客主要介绍了JavaScript的闭包 1.闭包的工作原理 简单地说,闭包就是一个函数在创建时允许该自身函数访问并操作该自身函数之外的变量时所创建的作用域. 例如: var outerValue = 'ninja'; var later; function outerFunction(){ var innerValue = 'samurai'; function innerFunction(){ debugger console.assert(outerValue,"I can se…
1. 代码求值机制 JavaScript中,有很多不同的代码求值机制. ● eval()函数 ● 函数构造器 ● 定时器 ● <script>元素 - 用eval()方法进行求值 作为定义在全局作用域内的eval()方法,该方法将在当前上下文内,执行所传入字符串形式的代码. 基本功能 ● 该方法将执行传入代码的字符串 ● 在调用eval()方法的作用域内进行代码求值 例如: eval("5+5") (function(){ eval("var ninja = 6&…
概要:本篇博客主要介绍函数的一些类型以及常见示例 1.匿名函数 使用匿名函数的常见示例: window.onload = function(){ assert(true,'power!'); }; //创建一个匿名函数作为事件处理程序,这里无需定义函数名,直接在其位置为其赋值即可; var ninja = { shout: function(){ assert(true,"Ninja"); } }; ninja.shout(); //创建一个函数,将其作为ninja的一个方法,使用sh…
书名 "学徒"=>"忍者" 性能分析 console.time('sss') console.timeEnd('sss') 函数 函数是第一类对象 通过字面量创建 function minjaFunction(){} 在变量或数组或者对象中的函数 let obj = { name: 'zhangsan', age() { return 1 } }; let arr = [1, 2, 3, 4, () => { return 1; }]; let nums…
1.定时器和线程 - 设置和清除定时器 JavaScript提供了两种方式,用于创建定时器以及两个相应的清除方法.这些方法都是window对象上的方法. 方法 格式 描述 setTimeout   id=setTimeout(fn,delay)  启动一个定时器,在一段时间(delay)之后执行传入的callback,并返回该定时器的唯一标识 clearTimeout  clearTimout(id) 如果定时器还未触发,传入定时器标识即可取消该定时器 setInterval id=setInt…
概要:本篇博客主要介绍JavaScript的原型 1.对象实例化 - 初始化的优先级 初始化操作的优先级如下: ● 通过原型给对象实例添加的属性 ● 在构造器函数内给对象实例添加的属性 在构造器内的绑定操作优先级永远都高于在原型上的绑定操作优先级.因为构造器的this上下文指向的是实例自身,所以我们可以在构造器内对核心内容执行初始化操作. - 协调引用 如下代码观察原型变化时的行为: function Ninja(){ this.swung = true; } var ninja = new N…
概要:本篇博客主要介绍了JavaScript的函数. 1.第一型对象 JavaScript的函数可以像对象一样引用,因此我们说函数是第一型对象.除了可以像其他对象类型一样使用外,函数还有一个特殊的功能,它们可以被调用.这些调用,通常是以异步的方式进行调用. 2.回调 回调是高效利用JavaScript必不可少的一部分. 3.函数声明 如果一个函数不需要用名称进行引用,则不需要对它命名.命名一个函数时,该名称在整个函数声明范围内都是有效的.此外,函数声明在顶层,window对象上的同名属性则会引用…
匿名函数 对于什么是匿名函数,这里就不做过多介绍了.我们需要知道的是,对于JavaScript而言,匿名函数是一个很重要且具有逻辑性的特性.通常,匿名函数的使用情况是:创建一个供以后使用的函数.简单的举个例子如下: window.onload = function() { alert('hello'); } var templateObj = { shout:function() { alert('作为方法的匿名函数') } } templateObj.shout(); setTimeout(f…
闭包的私有变量 function Ninja() { let feints = 0; this.getFeints = function () { return feints }; this.feint = function () { feints++; return feints } } let ninja1 = new Ninja(); 每一个通过ninja1 构造函数创建的对象实例可以获得各自的实例方法,但是私有变量不允许直接访问,为什么要保持私有变量的引用?,因为这些私有变量并不是对象的…