时间:2021-05-26
断言
单元测试框架的核心是断言方法,通常叫assert()。
该方法通常接收一个值--需要断言的值,以及一个表示该断言目的的描述。
如果该值执行的结果为true,断言就会通过;
否则,断言就会被认为是失败的。
通常用一个相应的通过(pass)/ 失败(fail)标记记录相关的信息;
function assert(value, desc) { let li = document.createElement('li'); li.className = value ? 'pass' : 'fail'; li.appendChild(document.createTextNode(desc)); document.getElementById('results').appendChild(li);}// 断言函数function assert(value, desc) { if (value) { console.log(`\033[32m ${desc} \033[0m`); // 断言通过 绿色字体 } else { console.log(`\033[31m ${desc} \033[0m`); // 断言失败 红色字体 }}函数
执行代码后,会弹出123,是因为JavaScript在大括号关闭处并没有终止其作用域。
作为函数进行调用
如果一个数不是作为方法、构造器、或者通过apply()或call()进行调用的,则认为它是“作为函数”进行调用的。
function ninja() {};ninja()var samurai = function() {};samurai()作为方法进行调用
当一个函数被赋值给对象的一个属性,并使用引用该函数的这个属性进行调用时,那么函数就是作为该对象的一个方法进行调用的。
var 0 = {};o.whatever = function() {};o.whatever();作为构造器进行调用
创建一个新的空对象;
传递给构造器都对象是this参数,从而成为构造器的函数上下文;
如果没有显式都返回值,新创建的对象则作为构造器的返回值进行返回。
function Ninja() { this.skulk = function() { return this; }}var ninja1 = new Ninja();var ninja2 = new Ninja();构造器的目的是通过函数调用初始化创建新的对象。
函数调用方式差异
作为方法调用,该上下文是方法的拥有者;
作为全局函数进行调用,其上下文永远是window(也就说,该函数是window的一个方法)。
作为构造器进行调用,其上下文对象则是新创建的对象实例。
使用apply()和call()方法
使用apply()和call()可以选择任意对象作为函数上下文;
函数总结
函数是第一型对象;
函数是通过字面量进行创建的,其名称是可选的。
在页面生命周期内,浏览器可以将函数作为各种类型的事件处理程序进行调用。
变量的作用域开始于声明处,结束于函数尾部,其会跨域边界(如:大括号)
内部函数在当前函数的任何地方都可用(提升),即便是提前引用。
函数的形参列表和实际参数列表的长度可以是不同的。
每个函数调用都会传入两个隐式参数。
可以用不同的方法进行函数调用,不同的调用机制决定了函数上下文的不同。
匿名函数
为了不让不必要的函数名称污染全局命名空间,可以创建大量的小型函数进行传递,而不是创建包含大量命令语句的大型函数。
递归
闭包
闭包使用场景:私有变量
在构造器内隐藏变量,使其在外部作用域不可访问,但是可以存在于闭包内。
function Ninja() { var feints = 0; this.getFenits = function() { return feints; } this.feint = function() { feints++; }}var ninja = new Ninja();ninja.feint();assert(ninja.getFenits() === 1, '调用一次,内部变量++');assert(ninja.feints === undefined, '函数外部不可访问')变量的作用域依赖于变量所在的闭包
闭包记住的是变量的引用,而不是闭包创建时刻该变量的值
原型与面向对象
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
相关阅读:谈谈我对JavaScript原型和闭包系列理解(随手笔记8)谈谈我对JavaScript原型和闭包系列理解(随手笔记9)什么是闭包闭包是什么?闭包是C
相关阅读:谈谈我对JavaScript原型和闭包系列理解(随手笔记6)谈谈我对JavaScript原型和闭包系列理解(随手笔记8)作用域引用《JavaScrip
在上篇文章给大家介绍了《谈谈我对JavaScript原型和闭包系列理解(随手笔记6)》,谈谈我对JavaScript原型和闭包系列理解(随手笔记9)可以点击了解
JavaScript中创建对象的模式汇总**JavaScript创建对象模式:对象字面量工厂模式构造函数模式原型模式结合构造函数和原型模式原型动态模式**面向对
接着上文《详解JavaScript基于面向对象之创建对象(1)》继续学习。4、原型方式我们创建的每个函数都有一个通过prototype(原型)属性,这个属性是一