|
导读网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立... 网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。 这篇文章给大家分享了一篇关于JavaScript函数、闭包、原型、面向对象的知识点学习笔记内容,有兴趣的朋友参考下。断言 单元测试框架的核心是断言方法,通常叫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`); // 断言失败 红色字体
}
}函数
if (window) {
var x = 123;
}
alert(x);执行代码后,会弹出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();构造器的目的是通过函数调用初始化创建新的对象。 函数调用方式差异
作为方法调用,该上下文是方法的拥有者; 使用apply()和call()方法
function juggle() {
var result = 0;
for (var n = 0; n < arguments.length; n++) {
result += arguments[n]
}
this.result = result;
}
var ninja1 = {};
var ninja2 = {};
juggle.apply(ninja1, [1,2,3,4]);
juggle.call(ninja2, 5,6,7,8)
assert(ninja1.result === 10, 'juggled via apply');
assert(ninja2.result === 26, 'juggled via call');使用apply()和call()可以选择任意对象作为函数上下文; 函数总结 函数是第一型对象;
函数是通过字面量进行创建的,其名称是可选的。 在页面生命周期内,浏览器可以将函数作为各种类型的事件处理程序进行调用。 变量的作用域开始于声明处,结束于函数尾部,其会跨域边界(如:大括号) 内部函数在当前函数的任何地方都可用(提升),即便是提前引用。 函数的形参列表和实际参数列表的长度可以是不同的。
每个函数调用都会传入两个隐式参数。
可以用不同的方法进行函数调用,不同的调用机制决定了函数上下文的不同。
匿名函数 为了不让不必要的函数名称污染全局命名空间,可以创建大量的小型函数进行传递,而不是创建包含大量命令语句的大型函数。 递归
闭包
var outerValue = 'ninja';
var later;
function outerFunction() {
// 该变量的作用域限制在该函数内部,并且在函数外部访问不到;
var innerValue = 'samurai';
// 在外部函数内,声明一个内部函数。
// 注意:声明该函数时,innerValue是在作用域内的
function innerFunction() {
assert(outerValue, 'I can see the ninja');
assert(innerValue, 'I can see the samurai');
// 将内部函数引用到later变量上,由于later在全局作用域内,所以可以对它进行调用。
later = innerFunction;
}
}
// 调用外部函数,将会声明内部函数,并将内部函数赋值给later变量。
outerFunction();
// 通过later调用内部函数。
// 我们不能直接调用内部函数,因为它的作用域(和innerValue一起)被限制在outerFunction内。
later();闭包使用场景:私有变量 在构造器内隐藏变量,使其在外部作用域不可访问,但是可以存在于闭包内。 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, '函数外部不可访问')变量的作用域依赖于变量所在的闭包 闭包记住的是变量的引用,而不是闭包创建时刻该变量的值 原型与面向对象
以上就是本章的全部内容,更多相关教程请访问JavaScript视频教程! 以上就是JavaScript函数、闭包、原型、面向对象学习笔记的详细内容,更多请关注php中文网其它相关文章! 网站建设是一个广义的术语,涵盖了许多不同的技能和学科中所使用的生产和维护的网站。 |
温馨提示:喜欢本站的话,请收藏一下本站!