美文网首页
纪念js中的那些坑

纪念js中的那些坑

作者: Hanaasagi | 来源:发表于2016-04-21 18:22 被阅读23次

0X01

js 中不存在块级作用域

for(var i=0,list = [];i<10;i++){
  list.push(function(){console.log('i='+i)})
}
list[1]();  // 10
for(var i=0;i<10;i++){
  list[i](); // 0 1 2 3 4 5 6 7 8 9
}  

0X02

js中存在一个特性-变量提升(Hoisting),变量的声明都将会被提升到当前作用域的顶部,如
if (!a) {
var a = 1;
}
console.log(a); // 1

这相当于

var a;
if(!a){
    a = 1;
}
console.log(a);

再看一个例子

var x = 1;
(function foo(){
    console.log(x); // undefined  
    var x = 10;  
})();

0X03

this的指向

Foo = {value:1};
Foo.method = function() {
    function test() {
        console.log(this.value);
        // 这里this不会指向Foo ,而会被设置为全局对象,浏览器中则为window
    }
    test();
}
Foo.method();
// 解决方案
Foo.method = function() {
    var that = this;
    function test() {
      console.log(that.value);
        // 使用 that 来指向 Foo 对象
    }
    test();
}
Foo.method();

另外将一个方法赋值给变量时,this的指向也会发生改变。

var test = someObject.methodTest;
test();

上例中,test 就像一个普通的函数被调用,函数内的 this 将不再被指向到 someObject 对象。

推荐一份很好的文档
JavaScript 秘密花园

相关文章

  • 纪念js中的那些坑

    0X01 js 中不存在块级作用域 0X02 js中存在一个特性-变量提升(Hoisting),变量的声明都将会被...

  • 跳进的那些js坑

    1、多行注释 如上,正则表达式里的*/结尾的部分,将多行注释已经给结束掉,当然报错啦 2、变量提升机制 原因:当函...

  • 人生中,有多少坑,可以踩呢。 那些大意,粗心,错过,都是纪念碑。 它们,树立在你的道路上,让回望时,多了辛酸,遗憾...

  • 总结一下ng中的那些坑

    转载自:总结一下ng中的那些坑 0.用jQuery取值的话,要在HTML上加上name属性,如果是原生js则不用 ...

  • js面试中的坑

    21、如何判断一个对象是否属于某个类? 使用instanceof if(a instanceof Person){...

  • JavaScript中的this的指向问题

    JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一。 个人也觉得js中的this不是一个好的...

  • 微信公众号支付开发-JSSDK

    最近微信网页开发要用到公众平台支付的功能,过程中坑不少。 引入js 在需要调用JS接口的页面引入如下JS文件(支持...

  • Vue踩坑实录(二)

    在上一篇中说了一下踩过的前三个坑,剩下的坑就在这篇中全部搞定吧。Vue踩坑实录(一) Vue-cli .js?.V...

  • Netty中的那些坑

    转载自:http://www.cnblogs.com/rainy-shurun/p/5213086.html Ne...

  • WKWebView中的那些坑

    为了方便以后查询,收藏呼神的博客 前言 关于WKWebView的特性和使用方法就不多说了,网上有很多文章介绍,我在...

网友评论

      本文标题:纪念js中的那些坑

      本文链接:https://www.haomeiwen.com/subject/ymitrttx.html