函数实际上是对象,每个函数都是Function类型的实例。
函数是引用类型。
函数名实际上是一个指向函数对象的指针,不会与某个函数绑定。
// 这种写法更能表达函数的本质 var sum = function(num1, num2) { return num1 + num2; }; var anotherSum = sum; sum = null; console.log(anotherSum(10, 20)); // 30 console.log(sum(10, 20)); // typeerror: sum is not a function
没有重载
function add(num) { return num + 100; } function add(num) { return num + 200; } var result = add(100); // 300 // 上面的代码和下面的代码没有什么区别 var add = function(num) { return num + 100; }; add = function(num) { return num + 200; };
那函数声明的意义?
// 这段代码是可执行的,因为解析器在向执行环境加载数据时, // 函数声明会被提升到顶部。而变量的声明提升状态为undefined console.log(sum(100, 200)); // 300 console.log(anotherSum); // undefined function sum(num1, num2) { return num1 + num2; } var anotherSum = function(num1, num2) { return num1 + num2; };
函数的属性和方法
// 示例函数 var color = "blue", obj = { color: "red" }; function sayColor() { return this.color; } // ECMAScript5的方法,返回一个绑定了this指针的函数 var objSayColor = sayColor.bind(obj); console.log(sayColor.length); // 参数的个数 console.log(sayColor.prototype); // sayColor {} 原型对象 console.log(sayColor.apply(obj, [])); // red console.log(sayColor.call(obj, "pink", "yellow")); // red console.log(objSayColor()); // red console.log(sayColor()); // blue