乐趣区

关于javascript:学习笔记

1.

函数的申明

JavaScript 有三种申明函数的办法。

(1)function 命令

function命令申明的代码区块,就是一个函数。function命令前面是函数名,函数名前面是一对圆括号,外面是传入函数的参数。函数体放在大括号外面。

function print(s) {console.log(s);
}

(2)函数表达式

除了用 function 命令申明函数,还能够采纳变量赋值的写法。

var print = function(s) {console.log(s);
};

采纳函数表达式申明函数时,function命令前面不带有函数名。如果加上函数名,该函数名只在函数体外部无效,在函数体内部有效。

var print = function x(){console.log(typeof x);
};

x
// ReferenceError: x is not defined

print()
// function

(3)Function 构造函数

第三种申明函数的形式是 Function 构造函数。

var add = new Function(
  'x',
  'y',
  'return x + y'
);

// 等同于
function add(x, y) {return x + y;}

2. 函数的反复申明

如果同一个函数被屡次申明,前面的申明就会笼罩后面的申明。

function f() {console.log(1);
}
f() // 2

function f() {console.log(2);
}
f() // 2

3.length 属性

函数的 length 属性返回函数预期传入的参数个数,即函数定义之中的参数个数。

function f(a, b) {}
f.length // 2

下面代码定义了空函数 f,它的length 属性就是定义时的参数个数。不论调用时输出了多少个参数,length属性始终等于 2。

4.toString()

函数的 toString() 办法返回一个字符串,内容是函数的源码。

function f() {a();
  b();
  c();}

f.toString()
// function f() {//  a();
//  b();
//  c();
// }

5.arguments 对象

(1)定义

因为 JavaScript 容许函数有不定数目的参数,所以须要一种机制,能够在函数体外部读取所有参数。这就是 arguments 对象的由来。

arguments对象蕴含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体外部,才能够应用。

var f = function (one) {console.log(arguments[0]);
  console.log(arguments[1]);
  console.log(arguments[2]);
}

f(1, 2, 3)
// 1
// 2
// 3

失常模式下,arguments对象能够在运行时批改。

(2)与数组的关系

须要留神的是,尽管 arguments 很像数组,但它是一个对象。数组专有的办法(比方 sliceforEach),不能在 arguments 对象上间接应用。

如果要让 arguments 对象应用数组办法,真正的解决办法是将 arguments 转为真正的数组。上面是两种罕用的转换方法:slice办法和逐个填入新数组。

var args = Array.prototype.slice.call(arguments);

// 或者
var args = [];
for (var i = 0; i < arguments.length; i++) {args.push(arguments[i]);
}

(3)callee 属性

arguments对象带有一个 callee 属性,返回它所对应的原函数。

退出移动版