标签:bin 添加 枚举 nbsp this class 警告 方式 out
//方法一 function sum (num1, num2) { return num1 + num2; } //方法二 var sum = function(num1, num2) { return num1 + num2; }; //不要忘了分号
注意,函数名是指向函数的指针,与其包含对象的指针没有什么不同。
由于ECMAScript中的函数可以传入多个参数,因此并没有重载。
解释器会先读取函数声明,使其在执行任何代码之前可用(函数声明提升),函数表达式则必须等到解释器执行到它所在的代码行,才会真正被解释执行。例:
alert(sum(10, 10)); //函数表达式 function sum(num1, num2) { return num1 + num2; } //函数声明
以上代码能被正确执行,因为函数声明被优先读取并添加到执行环境。
可以像传递参数一样把一个函数传递给另一个函数,传递的是函数指针,不能带括号
function callSomeFunction(someFunction, someArgument) { return someFunction(someArgument); }
可以在一个函数中返回另一个函数
unction createComparisonFunction(propertyName) { return function(object1, object2) { var value1 = object1.[propertyName]; var value2 = object2.[propertyName]; if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } }; } var data = [{name : "Zchary", age : 28}, {name : "Nicholas", age : 29}]; data.sort(createComparisonFunction("name")); alert(data[0].name); //Nicholas data.sort(createComparisonFunction("age")); alert(data[0].name); //Zachary
4.1 auguments
arguments是个数组对象,包含着传入函数的参数。它有一个callee属性,是个指向函数本身的指针。
var factorial(num) { if (num <= 1){ return num; } return num * factorial(num-1); //当函数名改变时,这个语句也要改变,否则函数失效 } var factorial(num) { if (num <= 1) { return num; } return num*arguments.callee(num-1); //此时与函数名无关,改变函数名函数也生效 }
4.2 this
this是对调用函数的对象的引用。当在全局作用域调用函数时,this引用的是window。
window.color = "red"; var o = {color : "blue"}; function sayColor() { alert(this.color); } sayColor(); //"red",此时this引用window o.sayColor = sayColor(); o.sayColor(); //"blue",此时this引用o
这是ES5规范化的一个属性,它保存着调用当前函数的函数的引用。
function outer() { inner(); } function inner(){ alert(inner.caller); } outer(); //警告框中显示outer()的源代码
5.1 每个函数都包含两个属性:
function sayName(name) { alert(name); } function sum(num1, num2) { return num1 + num2; } function sayHi() { alert("Hi); } alert(sayHi.length); //0 alert(sayName.length); //1 alert(sum.length); //2
5.2 每个函数都含有两个非继承而来的方法
function() sum(num1, num2) { return num1 + num2; } function callSum1(num1, num2) { return sum.apply(this, arguments); } function callSum2(num1, num2) { return sum.apply(this, [num1, num2]); } alert(callSum1(10, 10)); //20 alert(callSum2(10, 10)); //20
function sum(num1, num2) { reutnr num1 + num2; } function callSum(num1, num2) { return sum.call(this, num1, num2); } alert(callSum(10, 10)); //20
优点:使用call()或apply()可以扩充函数赖以运行的作用域,使对象与方法不需要有任何耦合。
window.color = "red"; var 0 = {color : "blue"}; function sayColor(){ alert(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window); //red sayColor.call(o); //blue
bind()方法:创建一个函数实例,其this值会被绑定到传递给bind()函数的值。
支持的浏览器:IE9++,Firefox4+, Safari5.1+,Opera12+和Chrome
window.color = "red"; var o = { color : "blue"}; function sayColor() { alert(this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue
标签:bin 添加 枚举 nbsp this class 警告 方式 out
原文地址:http://www.cnblogs.com/chen-zed/p/7365149.html