每天学点JavaScript 细节之函数相关

1、Js 中实参会以形参在函数中定义的顺序被赋值到形参上,第一个实参赋值到第一个形参,依次对应。实参数量大于形参,额外的实参不会赋值给任何形参;如果形参数量大于实参,没有对应实参的形参会被设为 undefined。

2、如果构造函数返回一个对象,该对象将作为将作为整个表达式的值返回,而传入构造函数的this 将被抛弃

      如果构造函数返回的是非对象类型,则会忽略返回值,返回的将是新创建的对象。

3、不同类型的函数调用之间的主要区别为——最终作为函数上下文(可以通过this参数隐式引用到)传递给执行函数的对象不同。对于方法而言,为方法所在的对象;对于顶级函数而言,是window 或者undefined (取决于是否处于严格模式下,严格模式下为undefined);对于构造函数来说是一个新创建的对象实例; 通过apply或者call 方法调用,this指向 call或者apply的第一个参数。

4.使用apply方法调用函数,需要为它传入两个参数: 作为函数上下文的对象和一个数组作为函数调用的参数。call的方法类似,但是第二参数不是数组,而是参数列表。在指定一个函数的上下文对象时特别有用。

5、箭头函数自身不包含上下文,从定义时的所在函数继承上下文。箭头函数在创建时就确定了this 的指向。

6、arguments 参数是传入函数的所有参数的集合。length属性表示传入参数的个数,通过arguments 对象可以获取到与函数形参不匹配的参数。 非严格模式下,arguments 对象是函数参数的别名,修改arguments 对象会修改函数实参;但在严格模式下,arguments对象不再是函数参数的别名,修改arguments 对象不会影响函数实参。

具体例子加深印象:

a.使用arguments对象统计传入的所有参数的和:

以下运行的两个程序结果为: test1 为123456   test2 为 “abc”,严格模式下,arguments 不是函数参数的别名,修改arguments对象不会修改到函数实参

以下函数的this指向 :严格模式下为undefined; 非严格模式下this 指向的是window

 以下的测试代码结果为:

(箭头表示this 指向,具体原则看上面)

箭头函数的this指向测试:

test1.guessThis() ---> test1
箭头函数的this值在创建时确定,guessThis()在test1内建立,this指向test1;

 test2.guessThis() ---> test1 ,理由同上,this永远指向test1

bind函数测试:

test1.guessThis() -----> test1

test2.guessThis() ----->test1

to be continued.........

猜你喜欢

转载自blog.csdn.net/Jackshijin/article/details/86518851