javascript IIFE in depth

function type

  1. 函数表达式

x = function (){
console.log(x);
}
ƒ (){
console.log(x);
} x;
ƒ (){
console.log(x);
} x();
ƒ (){
console.log(x);
} window.x;
ƒ (){
console.log(x);
}

x = function x(){
console.log(x);
}
ƒ x(){
console.log(x);
} x();
ƒ x(){
console.log(x);
} window.x;
ƒ x(){
console.log(x);
}

  1. 函数声明

function x(){
console.log(x);
} x();
ƒ x(){
console.log(x);
} window.x
ƒ x(){
console.log(x);
}

考察知识点

  1. closure
  2. IIFE
  3. hoisting
  4. scope
  5. function declaration / function expression
  6. named function / anonymous function

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions

closure

https://javascript.info/closure

js var hoisting

  1. function

  2. var


demo

https://muyiy.cn/question/js/33.html

// 下面的代码打印什么内容,为什么?

var b = 10;
(function b(){
b = 20;
console.log(b);
})();

var b = 10;
(function b(){
b = 20;
console.log(b);
console.log(window.b);
})(); ƒ b(){
b = 20;
console.log(b);
console.log(window.b);
}
// 10

函数表达式的函数名是常量,无法二次赋值(在正常模式下静默失效,在严格模式下报错)

非匿名自执行函数,函数名只读

'use strict';

var b = 10;
(function b(){
'use strict';
b = 20;
console.log(b);
console.log(window.b);
})(); // Uncaught TypeError: Assignment to constant variable.
at b (<anonymous>:4:7)
at <anonymous>:7:3

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/48#issuecomment-615547271



scope & hoisting

https://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

https://repl.it/@xgqfrms/Function-hoisting-greater-var-hoisting

https://stackoverflow.com/questions/7506844/javascript-function-scoping-and-hoisting

https://www.sitepoint.com/5-typical-javascript-interview-exercises/



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


最新文章

  1. 关于case语句中声明变量并初始化的注意事项
  2. C#如何自定义DataGridViewColumn来显示TreeView
  3. How to control PrincipalObjectAccess table growth in Microsoft Dynamics CRM 2011
  4. javascript的navigator对象
  5. JavaScript 堆
  6. MVC Sesion丢失问题
  7. 杭电OJ分类
  8. 刷新UITableView
  9. java课程设计-猜数游戏(201521123029 郑佳明)
  10. centos7 升级 git(2.14.3) 版本
  11. 爱因斯坦求和约定 (Einstein summation convention)
  12. 使用stylus
  13. DragonBones的下载和安装
  14. dojo DataGrid实现表格数据编辑的解决方案
  15. CSS之外边距折叠
  16. 移动App 的 ios11 和 iPhoneX 适配
  17. 李洪强漫谈iOS开发[C语言-053]-小结
  18. PyQt5资料
  19. Java知识点汇总
  20. LVM逻辑磁盘管理

热门文章

  1. epoll在fork子进程中的问题
  2. LOJ10199轻拍牛头
  3. 十四:SpringBoot-配置MongoDB数据库,实现增删改查逻辑
  4. Postman 的 Post 请求方式的四种类型的数据
  5. 2019 Multi-University Training Contest 1 D.Vacation(思维)
  6. Testing Beta Round (Unrated)
  7. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)
  8. Dire Wolf——HDU5115
  9. Codeforces Round #652 (Div. 2) C. RationalLee 贪心
  10. Codeforces Round #643 (Div. 2) B. Young Explorers (思维,贪心)