随笔分类 - JavaScript基础
摘要:数组有一套更加结构化的值存储机制。数组期望的是数值下标,也就是值存储的位置,通常被称为索引,是整数 var myArray = ['foo', 42, 'bar']; myArray.length; // 3 myArray[0]; // 'foo' myArray[2]; // 'bar' 数组也
阅读全文
摘要:如果访问的对象属性是一个函数,通常被称为‘方法’,把‘属性访问’说成了‘方法访问’。从技术角度来说,函数永远不会‘属于’一个对象,把对象内部引用的函数称为‘方法’似乎有些不妥。函数和对象的关系最多也只能说是间接关系 属性访问返回的函数和其他函数没有任何区别,除了可能发生的隐式绑定 this func
阅读全文
摘要:如果你需要通过表达式来计算属性名, [] 操作符就派上用场了。ES6 中使用 [] 包裹一个表达式来当作属性名 var prefix = 'foo'; var myObject = { [prefix + 'bar']: 'hello', [prefix + 'baz']: 'world', } m
阅读全文
摘要:存储在对象容器内部的是这些属性的名称,它们就像指针(从技术角度来说是引用)一样,指向这些值真正的存储位置。 var myObject = { a: 2 } myObject.a; // 2 myObject['a']; // 2 . 语法通常被称为‘属性访问’,[] 语法通常被称为‘键访问’。这两种
阅读全文
摘要:JavaScript 还有一些对象子类型,通常被称为内置对象 String Number Boolean 这三个内置对象的名字看起来和简单基础类型一样,实际上它们的关系更复杂 Object Function Array Data RegExp Error 这些内置函数可以当作构造函数来使用,从而构造
阅读全文
摘要:对象可以通过两种形式定义,文字(声明)形式 和 构造形式 文字语法 var myObj = { key: value, // ... } 构造形式 var myObj = new Object(); myObj.key = value; 文字形式和构造形式生成的对象是一样的,唯一的区别是,文字形式可
阅读全文
摘要:this 的四条绑定规则包含所有正常的函数。ES6 中箭头函数是一种无法使用这四条规则的特殊函数类型,他是根据外层作用域来决定 this 。箭头函数不是使用 function 关键字定义,而是使用 => 我们看看箭头函数的词法作用域 function foo(){ return (a) => { c
阅读全文
摘要:你有可能有意或者无意地创建一个函数的“间接引用”,在这个情况下,调用这个函数会应用默认规则 间接引用最容易在赋值时发生: function foo(){ console.log(this.a); } var a = 2; var o = { a: 3, foo: foo}; var p = { a:
阅读全文
摘要:规则总有例外,这里也一样。如果你把 null 或者 undefined 作为 this 的绑定对象传入 call、apply 或者 bind,应用的是默认绑定规则 function foo(){ console.log(this.a); } var a = 2; foo.call(null); //
阅读全文
摘要:我们首先来看下隐式绑定和显示绑定哪个优先级更高 function foo(){ console.log(this.a) } var obj1 = { a: 2, foo: foo } var obj2 = { a: 3, foo: foo } obj1.foo(); // 2 obj2.foo();
阅读全文
摘要:在传统的面向类的语言中,“构造函数“是类中的一些特殊方法,使用 new 初始化类时会调用类中的构造函数。通常的形式是这样的 something = new MyClass(..); 然而 JavaScript 中 new 的机制实际上和面向类的语言不同。它们只是被 new 操作符调用的普通函数而已。
阅读全文
摘要:隐式绑定是必须在一个对象内部包含一个指向函数的属性,并通过这个属间接引用函数,从而把 this 间接隐式绑定到这个对象上。 显示绑定是通过 call() 和 apply() 方法。它们的第一个参数是一个对象,它们会把这个对象绑定到 this. call function foo() { consol
阅读全文
摘要:默认绑定 最常用的调用类型,独立函数调用,默认规则 function foo() { console.log(this.a); } var a = 2 foo(); // 2 如果使用严格模式,全局对象将无法使用默认绑定,this 会绑定到 undefined function foo() { 'u
阅读全文
摘要:我们排除了一些对于 this 对错误理解并且明白了每个函数的 this 是在调用时被绑定的,完全取决于函数的调用位置。寻找调用位置就是寻找“函数被调用的位置”,但是做起来并没有这么简单,因为某些编程模式可能会隐藏真正的调用位置 最重要的是要分析调用栈,就是为了到达当前执行位置所调用的所有函数 fun
阅读全文
摘要:第一种误解:this 理解成指向函数本省,函数看作一个对象,this 并不像我们所想的那样指向函数本身。 function foo(num){ console.log('foo: ' + num); this.count++; } foo.count = 0; var i; for(i=0; i<1
阅读全文
摘要:var me = { name: 'Kyle' }; var you = { name: 'Reader' } function identify(){ return this.name.toUpperCase(); } function speak(){ var greeting = "Hello
阅读全文
摘要:模块是闭包应用中最强大的一个。 function CoolModule() { var something = 'cool'; var another = [1, 2, 3]; function doSomething() { console.log( something); } function
阅读全文
摘要:要说明闭包,for 循环是常见的例子 for (var i=1; i<=5; i++) { setTimeout(function timer() { console.log(i); }, 0) } 延迟函数的回调会在循环结束时才执行,执行循环的时候,变量的值已经变成 6 了,因此会每次输出一个 6
阅读全文
摘要:上一节的闭包是为了解释如何使用闭包而人为地在结构上进行修饰,在昨天的闭包基础上,我们可以更加灵活的使用闭包 function wait(message){ setTimeout(function timer(){ console.log(message) }, 1000) } wait('hello
阅读全文
摘要:当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行 function foo(){ var a = 2; function bar() { console.log(a); } return bar } var baz = foo(); baz(); // 2 —
阅读全文