核心知识点基本都讲了,JavaScript 入门的话是很好的一本书。
版次:2014 年 3 月第 1 版
Function()
参数
Function()
构造函数采用不定数量的参数,但 Function()
构造函数的最后一个参数是一个包含具有函数体语句的字符串。在最后一个参数之前传递给构造函数的任何参数都可用于创建的函数。也可以将多个参数放在一起以逗号分隔形成字符串进行传递。
let add = new Function('a', 'b', 'return a + b'); // 等于 let add = new Function('a, b', 'return a + b'); // 等于 let add = function (a, b) { return a + b; }; // 等于 function add (a, b) { return a + b; }
arguments.callee
属性
arguments
对象拥有名为 callee
的属性,它是对当前执行函数的引用。该属性可以用于从函数的作用域内引用函数(如 arguments.callee
) - 自我引用(严格模式 use strict;
不能使用)。当函数需要递归调用时,它非常有用。
function SumNum (num) { if (num === 1) { return num } return num + arguments.callee(--num); } console.log(SumNum(5)); // 15 // 尾递归 function SumNumTail (num, total) { // total = 0 设置默认值会报错,因为严格模式不能使用arguments.callee if (num === 1) { return total + 1; } total += num return arguments.callee(--num, total); } console.log(SumNumTail(5, 0)); // 15
可以通过利用 callee
属性获得长度值,即 arguments.callee.length
。
自调用的匿名函数语句
自调用的匿名函数语句。
(function (msg) { console.log(msg); })('Hello, 2018!'); // Hello, 2018! // 等于 (function (msg) { console.log(msg); }('Hello, 2018!')); // Hello, 2018! // 等于 !function (msg) { console.log(msg); }('Hello, 2018!'); // Hello, 2018!
创建继承连
设计原型继承的目的是要在传统的面向对象编程语言中找到模仿继承模式的继承链。继承只是一个对象可以访问另外一个对象的属性。具体做法是,实例化想要继承的对象,将该对象实例作为要继承该对象实例的函数的 prototype
属性。完成之后,对象之间有一个链接(也称为 __proto__
),可以通过属性查找将可用属性扩展至对象。
function f0 () {} function f1 () {} f1.prototype = new f0(); console.log(f1.prototype.__proto__ === f0.prototype); // true