为了账号安全,请及时绑定邮箱和手机立即绑定

function()函数的具体用法?

function()函数的具体用法?

炎炎设计 2021-02-24 15:15:02
请大侠具体告知!
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

Function类型
函数实际上是对象,每个函数实际上都是 Function 类型的实例。而且与其他引用类型一样具有属性和方法。函数名实际上是一个指向内存堆中某个函数对象的指针。

定义函数的方式

1、函数声明

function sum(num1,num2){  return num1+num2;
}

2、函数表达式

var sum=function(num1,num2){ return num1+num2;
};

定义了一个变量 sum 并将其初始化为一个函数,注意到 function 关键字后面并没有函数名,这是因为在使用函数表达式定义函数,没必要使用函数名,通过变量 sum 即可引用函数。还要注意函数末尾有个分号,就像声明其他变量一样。

new 构造函数,虽然这种用法也是函数表达式,但该用法不推荐。因为这种语法会导致解析两次代码(第一次是解析常规的ECMAScript代码,第二次是解析传入构造函数中的字符串),影响性能。


使用 Function 构造函数,构造函数可以接受任意数量的参数,但最后一个参数始终都被看成是函数体,前面的参数则枚举出了新函数的参数。

var sum=new Function('num1','num2','return num1+num2;');
sum;// function anonymous(num1,num2/**/) {return num1+num2;
}

    当使用不带圆括号的函数名是访问函数指针,而非调用函数。

        扩展资料

1、ECMAScript中所有参数传递的都是值(即使是引用也是传递的地址值,不是引用传递参数(可参考 JavaScript传递参数是按值传递还是按引用传递))。

2、ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。之所以这样,是因为ECMAScript中的参数在内部是用一个数组表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。

3、在函数体内,可以通过 arguments 对象来访问这个数组。从而获取传递给函数的每个参数。

4、关于 arguments 的行为,它的值永远与对应命名参数的值保持同步。因为 arguments 对象中的值会自动反映到对应的命名参数。

5、所以修改 arguments[1] ,也就修改了 num2 。不过这并不是说读取这两个值会访问相同的内存空间,它们的内存空间是独立的,但他们值会同步(WHY),要是JavaScript能直接访问内存就好了验证一下。

6、但如果只传入了一个参数,那么 arguments[1] 设置的值不会反映到命名参数中,这是因为 arguments 对象的长度是由传入参数个数决定的,不是由定义函数时的命名参数个数决定的,没有传递值的命名参数将自动被赋予 undefiend 值,这就跟定义了变量但没初始化一样。



查看完整回答
反对 回复 2021-03-19
  • 2 回答
  • 0 关注
  • 329 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信