天猫Web前端电话面试(2015/7/2)

匿名网友 匿名网友 发布于: 2015-10-13 00:00:00
阅读 175 收藏 0 点赞 0 评论 0

1.js中的this

没回答太好,只说了谁调用它就指向那个函数,还可以用apply,call去改变指针指向

在函数执行时,this 总是指向调用该函数的对象。
要判断 this 的指向,其实就是判断 this 所在的函数属于谁。
在《javaScript语言精粹》这本书中,把 this 出现的场景分为四类,简单的说就是:
1.有对象就指向调用对象
    var a = {
        name : '周恩来',
        getName:function(){
            console.log(this.name)
        }
    }
    a.getName(); // -->this指向a
2.没调用对象就指向全局对象
    this.name = '周永康'; // ---> this指向全局对象 window
3.用new构造就指向新对象
    function Do(){
        this.name = '毛泽东';
    }
    var laRou = new Do();
    this指向laRou
    假如没有使用关键字new去构造一个函数,而是直接调用Do(),那此时的this是指向全局window的
    因此立即执行函数的this也是指向window的
4.通过 apply 或 call 或 bind 来改变 this 的所指。
    var a = {
        name : '周恩来',
        getName:function(){
            console.log(this.name)
        }
    }
    var b = { name:'林彪' };
    a.getName.call(b) // ---> '林彪',this指向b

2.inline-block的兼容性

3.作用域链

作用域链主要是js语句执行时,按照什么样的顺序去查找变量。

var name = "毛泽东" ;
var obj = {name:'周恩来'}
function t(){
  var name = "江青"
  function inner(){
    var name="毛新宇" ;
    console.log(name);
  }
  inner();
}
t(); // 当执行console.log(name)时,name变量的查找顺序是 inner-->t-->window
with语句可以更改作用域链,比如把
console.log(name)换成
with(obj){
  console.log(name)
}
name变量的作用域链就变成 with-->inner-->t--->window
也就说先从当前上下文环境跳转到with的参数对象,再回到正常的作用域链

评论列表
文章目录