一些JS概念

Posted yingmhd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些JS概念相关的知识,希望对你有一定的参考价值。

变量提升

JS引擎的工作方式:先解析代码,获取所有被声明的变量,然后再一行一行的运行

console.log(a) // undefined 
var a = 2

相当于

var a
console.log(a)
a = 2

这就是变量提升

函数声明也会提升,并且优先于表达式
getName() // 1 
function getName() {
  console.log(\'1\')
}
var getName = function() {
  console.log(\'2\')
}
getName() // 2

暂时性死区

ES6的let\\const不会变量提升

typeof a // ReferenceError: a is not defined
let a

因为let不会变量提升,所以在声明前调用会报错

let x = \'outer value\'
!(function(){
    console.log(x) //  Cannot access \'x\' before initialization
    let x = \'inner value\'
})()

ES6规定,let/const命令会使区块形成封闭的作用域,在这个作用域下,从进入到变量可以访问之间的一段时间,就称之为暂时性死区,在暂时性死区,该变量都是不可用的

this指向

  1. 单独使用,指向全局对象window,严格模式下,指向undefined
  2. 函数内部,函数执行时才能确定

    function f() {
      var user = "星辰大海";
      console.log(this.user); // undfined   console.log(this); // Window }
    f();
  3. 方法中,this指向调用方法的对象

      var a = 18;
      var obj = {
        a: 19,
        b: {
          a: 20,
          c: function () {
          console.log(this.a); 
          }
        }
      }
      obj.b.c(); // 20

以上是关于一些JS概念的主要内容,如果未能解决你的问题,请参考以下文章

20个简洁的 JS 代码片段

Relay.js 没有正确解析组合片段

VS Code中自定义Emmet代码片段

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

几个关于js数组方法reduce的经典片段

VSCode自定义代码片段——JS中的面向对象编程