1.arguments
1.1arguments怎么理解
arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。例如,如果一个函数传递了三个参数,你可以以如下方式引用他们:
arguments[0]
arguments[1]
arguments[2]
1.2arguments是伪数组
function fn(){
console.log(arguments)
}

其实我们再看下面的原型,是没有数组里面共有原型的,所以是伪数组。

2.this
2.1this是什么
function fn(){
console.log(this)
}
fn()//this如果什么都不给默认指向小写的window

function fn(){
'use strict'
console.log(this)
}
fn()//这样this就不是window

我们还有一种方法可以让函数传什么this就是什么,所以说this是隐藏的参数(call的第一个参数).
function fn(){
console.log(this)
}
fn.call(1)

2.2两种调用方式
let person = {
name: 'frank',
sayHi(this){
console.log(` ` + this.name)
}
}
第一种小白调用方法
person.sayHi()
第二种大师调用方法,推荐用第二种方法,this就是第一个参数,所以推荐以后写的时候转化为这种写法
person.sayHi.call(person)
2.3this经典面试题
var obj = {
foo: function(){
console.log(this)
}
}
var bar = obj.foo
obj.foo() // 打印出的 this 是 obj
bar() // 打印出的 this 是 window
解题思路:
1.我们第一步先转化函数的调用模式,转化成call方式.
2.obj.foo()转化为obj.foo.call(obj)
3.bar()转化为bar.call(undefined)
4.所以第一是obj,第二个按理说打印出来的 this 应该就是 undefined 了吧,但是浏览器里有一条规则:如果你传的 context 就 null 或者 undefined,那么 window 对象就是默认的 context(严格模式下默认 context 是 undefined) 因此上面的打印结果是 window.
本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源.
网友评论