博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JS】引用类型之Function
阅读量:5977 次
发布时间:2019-06-20

本文共 2474 字,大约阅读时间需要 8 分钟。

定义方法

//方法1:推荐function sum(value1,value2){}//方法2:不推荐//原因:如果有调用此方法的代码在这个定义之前就会调用不到(未读取到内存)这个函数而报错,这跟javascript的读取引擎有关var sum = function(value1,value2){}//方法3:不推荐,在Safari中会导致错误var sum = function sum(value1,value2){}//方法4:不推荐var sum = new Function("num1","num2","rturn num1+num2");

 

函数是没有重载的,后面定义的会覆盖前面定义的

function sum(num1,num2){    alert(num1 + num2);}function sum(num1,num2,split){    alert(split + "," + (num1+num2))}sum(1,2);//undifined,3

 

函数的内部属性

arguments属性,是一个保存入参的数组对象,但其有一个callee的属性指向拥有arguments属性的函数

function factorial(num){      if (num <= 1) {         return 1;      } else {         return num * arguments.callee(num-1);        //等同于  return num * factorial(num-1);  但是上面的方法更灵活,不受函数名更改的影响,消除了耦合      }}var trueFactorial = factorial;        factorial = function(){            return 0;};        alert(trueFactorial(5));   //120  递归运算alert(factorial(5));       //0

this属性

指向该function的拥有者,如果是全局函数this则指向window对象

window.color = "red";var o = { color: "blue" };        function sayColor(){      alert(this.color);}        sayColor();     //red        o.sayColor = sayColor;o.sayColor();   //blue

caller属性

该属性保存调用的函数的引用,如果是在window环境下该属性值为null

function outer(){       inner();}        function inner(){     alert(arguments.callee.caller);//调用了outer.toString()}        outer();//弹出outer的定义的源代码

 

函数的外部属性和方法

外部属性

1、length:表示函数希望接受的参数的个数

2、prototype:保存着函数的例如valueOf()等函数,只是访问方式是function.valueOf()而已,并且这个属性里的信息是不可以被枚举

 

apply方法

function sum(num1, num2){            return num1 + num2;}        function callSum1(num1, num2){            return sum.apply(this, arguments);//传入arguments对象}         function callSum2(num1, num2){            return sum.apply(this, [num1, num2]);//传入数组}        alert(callSum1(10,10));   //20alert(callSum2(10,10));   //20

call方法

作用跟apply是一样的,只是接收参数的方式不一样,第一个是参数是执行环境对象,其余的参数必须逐个列举出来传递给函数

function sum(num1, num2){    return num1 + num2;}function callSum(num1, num2){    return sum.call(this, num1, num2);}        alert(callSum(10,10));   //20

apply和call方法的强大之处并非简单的传值调用,而是在于动态的改变函数的运行环境(也就是函数的内部属性this的值)

window.color = "red";var o = { color: "blue" };        function sayColor(){    alert(this.color);}        sayColor();            //red//调用apply方法一样sayColor.call(this);   //redsayColor.call(window); //redsayColor.call(o);      //blue

bind方法

动态改变方法的内部属性this的值

window.color = "red";var o = { color: "blue" };                           function sayColor(){            alert(this.color);}var objectSayColor = sayColor.bind(o);objectSayColor();   //blue

转载地址:http://qesox.baihongyu.com/

你可能感兴趣的文章
Windows 2012 R2 DataCenter服务器DNS无法打开AD, DNS错误代码4000 4007 4013
查看>>
java基础数据类型char
查看>>
打印 PE导入导出表
查看>>
miniWindbg 功能
查看>>
五、判断银行卡号的正则
查看>>
mysql基于mysqlslap的压力测试
查看>>
zencart中query_factory.php中连接mysql次数
查看>>
fail2ban 保护linux安全(转载)已用于生产环境
查看>>
表格元素的添加和删除,计算器,全选全不反选
查看>>
数据约束
查看>>
网络营销第七课(1):制定SEO计划(网站相关数据分析)
查看>>
nginx rewrite 参数和例子
查看>>
mysqldump命令
查看>>
github上传代码步骤
查看>>
利用express搭建一个restful api 服务器
查看>>
(转)调整.NET控件WebBrowser的默认浏览器内核版本
查看>>
[导入]让你的WAP网站有更好的兼容性
查看>>
.NET Exceptionless 本地部署踩坑记录
查看>>
航电OJ-2544最短路
查看>>
CF772E Verifying Kingdom
查看>>