yan.zheng
yan.zheng
mark 正好现在需要
最近刚从后端转前端 看了一下JS语法,吐槽点有点多,但是我刚看了下 文中练习4的解释 "window.a之所以是undefined,是因为var a = 1;发生了变量声明提升。" 这句明显不对,所谓的变量hoist 其实不过是底层引擎 首先扫描了var 并将其默认赋值为undefined, 然后再开始顺序执行JS代码,这里之所以为undefined只是单纯顶层全局变量没有定义这个变量, 跟函数内变量没有关系的。
关于this的指向 其实很简单 , 因为this的指向只与函数的调用模式有关 1. 当一个函数被保存为一个对象的属性值的时候,这个方法被立刻调用时this默认是被绑定到该对象。**但是问题就出在this的绑定其实是发生在调用的时候,延迟绑定使得函数可以对this复用,这也是奇怪的地方,第一个在于立刻被执行 所以绑定到了对象上,第二个延迟绑定 此时的运行环境在全局,所以this被复用指向了global。** 2. 当一个函数并非一个对象的属性值的时候, 此时this默认被绑定到全局对象,这明显是语言设计有问题,其他语言默认应该是内部函数被调用,this 应该仍然绑定到外部函数的this变量(真的让人想吐槽)。 3.如果是以构造器模式调用,则this会被绑定到新的对象 在ES6新语法中 construct()方法中 this都是默认绑向新对象。 4. Apply Bind Call 中this的指向则与方法中传入的this有关,纯函数式编程 这点我觉得比Java强很多。
写的挺不错的,我正好也是个高级前端,看来大家的问题都挺相似。可以补充一点程序员最好有点产品思维,不要做拉磨的驴。