javascript声明语句以及IIFE问题

JavaScript 遵循了一般编程语言的“语句 - 表达式”结构,多数编程语言都是这样设计的。

image.png
image.png

这里记录一下自己以前不太熟悉的知识点。

var语句

  • 预编译阶段变量提升
console.log(a); // undefiend
var a = 1;
  • 穿透for,switch,if等
if(true) {
  var a = 1;
}
console.log(a); // 1

let和const语句

  • 仅作用于当前作用域,不可再次声明。
  • const声明的变量无法修改。
  • 无变量提升问题。
  • 不会穿透for,switch,if等

函数声明

  • 预编译阶段提升
console.log(foo); // function
function foo() {};
  • 在if中不会提升
console.log(foo); // undefined
if(true) {
  function foo() {};
}

IIFE-立即执行的函数表达式

  • 用来产生作用域,例如:
for (var i = 0; i < 10; i++) {
  setTimeout(() => {
    console.log(i); // 得到10个10
  })
}

// 使用IIFE来得到0-9
for(var i = 0; i < 10; i++){
  (function(a){
    setTimeout(function(){
      console.log(a); // 得到0-9
    }, 0)
  })(i);
};
  • 产生只读的函数名特性
var a = 1;
(function a() {
  console.log(a); // function
  a = 2; // 在当前作用域中a作为函数名只读,无法修改
  console.log(a); // function
})();
console.log(a); // 1;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 语句 JavaScript 语句是发给浏览器的命令。这些命令的作用是告诉浏览器要做的事情。下...
    convertible阅读 224评论 0 0
  • if语句 if (condition) {statement1} else {statement2};其中的 co...
    chasing_dream阅读 290评论 0 0
  • JavaScript语句通常以语句标识符开头,以标识要执行的JavaScript操作。语句标识符是保留字,不能用作...
    web全栈阅读 202评论 0 0
  • JavaScript 从交互的角度,描述行为(提升用户体验)。 JavaScript-基础 Github 特点 简...
    LoTwT阅读 244评论 0 0
  • 篇外之言 前段时间,由于电脑WebStorm软件在Git提交过程中卡机强制退出操作后,将自己电脑里平日对前端的学习...
    Emily_Lucky阅读 353评论 0 1