<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript函数进阶第5课</title>
</head>
<body >
<script type="text/javascript">
//javascript中任何函数都有两个属性:length与prototype
function test(num1,num2,num3){
alert(test.length); //函数名.length属性返回当前函数的形参个数
alert(arguments.length); //arguments.length返回当前函数实际传入的参数的个数
}
test();
//javascript中任何函数都有两个非继承而来的两个方法:apply()与call()
//这两个方法都是在特定烦人作用域中调用函数,实际上等于设置函数体内this对象的值
//apply()接收两个参数:第一个是参数是函数运行的作用域;另一个参数是数组(也可以是数组实例也可以是arguments对象)
function sum(a,b) {
return a+b;
}
function applySum(a,b) {
return sum.apply(this,[a,b]);
}
function applySum2(a,b) {
return sum.apply(this,arguments)
}
alert(sum(10,20));
alert(applySum(10,20));
alert(applySum2(10,20));
//call()方法第一个参数也是函数运行的作用域,但第二个参数都是残敌参数,传递给函数的实际参数需要逐个列举出来(用逗号隔开)
function callSum(x,y) {
return sum.call(this,x,y);
}
alert(sum(30,20));
alert(callSum(30,20));
//apply()方法和call()方法通常用来扩充函数运行的作用域而非单纯地传递参数
var color="red";
var o={color:"blue"}
function sayColor() {
alert(this.color);
}
sayColor();// 全局变量red
sayColor.call(this);// 全局变量red
sayColor.color(window); // 全局变量red
sayColor.call(o); //作用域o里面的属性blue
</script>
</body>
</html>
相关文章
- MAC OS下使用OpenSSL生成私钥和公钥的方法
- 矩阵奇异性和“病态”问题的解释与改善方法(简单易懂)
- LaTeX中单行和多行注释的几种方法
- 使用tcl命令保存vivado工程成.tcl文件和使用.tcl文件恢复vivado工程的方法
- Conda和PiP使用清华源安装Python的channel设置方法
- Javascript的对象封装和继承有哪些方法?优劣分别是什么?
- oracle 函数中,一定要注意出现空记录和多条记录的处理方法
- VisualSVN Server的配置和使用方法
- HTML基础篇(标签和属性整--已剔除不被浏览器支持的部分)
- ORACLE · 保留两位小数的三种方法 · 方法一 round函数