javascript 堆栈调用及变量作用域
javascript 单线程运行,遇见执行语句,则一条一条命令执行(执行语句也是入栈,再出栈);遇见对象和函数(也是对象),则入堆;
执行函数的时候,则是使用栈;因此函数中的声明的变量(不包括隐式声明的全局变量)都是栈内存,栈调用完后也就销毁了(不包括闭包)
  let name = 'test';   //全局变量,(js单线程)
  this.name = 'haha';   //全局对象的属性
  let test = {
  name: 'cjl',
  sayReject: function() {
      console.log(name);
  },
  };
  //结果
  //test
  function testFunc() {
  var name = 'dd';
  dd="sdfsd" //隐式声明全局变量
  function sayHello() {
      console.log(name);
  }
  sayHello();
  }
  testFunc();
  console.log(dd); //要放在testFunc后面执行
javascript this特指对象
javascript中,this要来制定对象,默认有一个全局对象,全局对象和全局变量不一样,对象是放在堆中,而全局变量则是直接存放在栈内存中的。 而箭头函数中的this,则是一个常量,只想函数定义时的this指向
  let name = "test";
  this.name = "haha";  //这儿的this,并不是全局对象;浏览器中默认的全局windows对象
  let test = {
  name: "cjl",
  sayHello: () => {
      console.log(this);
  },
  sayWelcome: function() {
      console.log(this.name);
  },
  };
  test.sayHello();
  test.sayWelcome();
  const temp = test.sayWelcome;
  temp.call(this);
  //结果
  //全局对象
  //cjl
  //haha
javascript 概览
因为javascript是单线程的,是一条一条执行的,很多时候我们思考一下,就能晓得其中原理。