函数调用:
/* 1. 函数调用 */
var temp = distance(0,1,2,3);
/* 2. 方法调用 */
this.CName = "全局";
var o = {
CName:"o类",
m:function(){
var self = this;
console.log(this == o); //true
console.log(this.CName); //o类
f();
function f(){
console.log(this == o);
//false,此this绑定到全局对象
console.log(this.CName);
//全局
console.log(self == o);
//true
console.log(self.CName);
//o类
}
}};
o.m();
关于this:
一丶当它为一个对象上的方法的时候,this是当前这个对象。
二丶函数调用模式当函数并非一个对象的属性时,那么它被当做一个函数来调用。此模式下this绑定到全局对象。通过在对象内将this赋值给that,可以使函数模式下调用that来访问指定对象。
函数的实参和形参:
/* 1. 可选形参 */
function getPropertyNames(o,a){
a = a||[];
for(var property in o){
a.push(property);
}
return a;
}
var a = getPropertyNames(o);
var b;
getPropertyNames(p,b); // 两种调用
/* 2. 可变长实参 */
function max(){
var max = 0;
for(var i=0; i<arguments.length; i++){
if(arguments[i]>max){
max=arguments[i];
}
return max;
}
}
// 关于arguments
function test_1(a,b,c,d){
console.log(a,b,c,d); //1,2,3,4
for(var i=0; i<arguments.length; i++){
arguments[i] = 0;
}
console.log(a,b,c,d); //0,0,0,0
}
test_1(1,2,3,4);
//改变arguments[i]时,对应传进去的参数也会改变
caller&callee:
// caller: 正在执行函数的函数
// callee: 正在执行的函数
function test_2(){
console.log("test_2");
function test_3(){
console.log("test_3");
function test_4(){
console.log("test_4");
//arguments.callee(); //这里会循环调用test_4
//test_4.caller();//这里回调到test_4调用者test_3
}
return test_4();
}
return test_3();
}
test_2();
// 还可以用来做递归
var plus = function(x){
if(x<=1) return 1;
return x*arguments.callee(x-1);
}
console.log(plus(5));
参数类型检测:
isfinite(); // 是否有限数
isArrayLike(); // 是否是数组
函数的自定义属性:
uniqueInterger.count = 0
// 给uniqueInterger函数定义了一个count属性
function uniqueInterger(){
//var a="myfunc";
return uniqueInterger.count++;
}
console.log(uniqueInterger()); // 0
console.log(uniqueInterger()); // 1
console.log(uniqueInterger()); // 2
作为命名空间的函数:
function myModule(){
// 模块代码
// 这个模块使用的变量都是局部变量
// 不会污染全局命名空间
}
myModule() //别忘记调用这个函数
//或者更简单的
(function(){
// 模块代码
}());
原文:http://www.cnblogs.com/nemoro1928/p/5377175.html