当前位置:网站首页>自调用函数和因不声明变量而自动定义var的相关问题
自调用函数和因不声明变量而自动定义var的相关问题
2022-07-13 17:37:00 【Genting丶incubus】
首先给出默认不声明的变量下var定理:
函数体内,不声明变量 (如a=2) 他会向上级查找这个变量的定义,查找到顶层时候,还没有定义的话,它就会自动使用 var 定义(非严格模式下)
而自调用函数下 有且不仅有以下特点:
- 函数声明和执行是连续 一起的,既没有函数声明提升
- 自调用函数内的函数的定义是常量
直接上代码 用题目来巩固
对于自调用函数
//函数情况1
var a=1;
var a=2;
(function a() {
console.log(a);//输出a函数内容 因为没有函数声明提升
})()
console.log(a);//2 a函数是在自调用函数中声明定义的 不会外传 而var重复声明2覆盖了1
//函数情况2
var a=1;
(function a() {
a=2; //因为作用域链上有a函数 不符合定理 不会var 但自调用函数里函数a是常量 常量不能修改 此时a=2是无效操作 严格模式下报const错误
console.log(a);//输出a函数内容
})()
console.log(a);//1 没有触发定理 没有var 所以自调用函数里a的声明没有外传
//函数情况3
(function b() {
a=2; //作用域链上没有a 符合定理 所以var a=2
console.log(a);//输出2
})()
console.log(a);//2 符合定理 所以var a=2 传出自调用函数外函数情况1中,因为函数声明没有提升,所以不会出现a=2把a函数替换掉 导致“原a函数”调用不了的情况。
函数情况2中,因为作用域链上有a函数 不符合定理 不会var 但自调用函数里函数a是常量 常量不能修改 此时a=2是无效操作 严格模式下报const错误
函数情况3中,符合了定理,所以相当于最外层 有一个var a=2 所以传出了函数体外
对于普通函数
//函数情况4 正常情况下
function a(){
var a=2 //a=2是在函数体内定义的 不会外传
console.log(a)//2
}
a()
console.log(a)//a函数内容
//函数情况5
function a(){
a=2//对比函数情况2 作用域链上有a函数 不符合定理 不会var a函数不是常量a=2不是在函数内定义的 所以a=2覆盖了a函数 所以效果几乎等同于函数情况6
console.log(a)//2
}
a()
console.log(a)//2
//函数情况6
function a(){}
a=2//此时 a值被替换成2
console.log(a)//2
console.log(a)//2这里主要拿函数情况5来对比,对比函数情况2,作用域链上有a函数 不符合定理 不会var,a函数不是常量且a=2不是在函数内定义的 所以a=2找到外层定义的a函数并覆盖了a函数 所以效果几乎等同于函数情况6
边栏推荐
- Idea自动化生成数据库中对应表的实体类
- FTP 上传文件脚本说明
- Dark blue themed boss, can you add a typewriter function so that you can choose when typing
- Practice of Flink CDC in Dajian cloud warehouse
- JS预编译
- Blue Bridge Cup: the second game of the 13th provincial competition of single chip microcomputer group
- Array changes, but the view cannot be updated (reason and thinking)
- Svelte 官方入门教程(5)—— 事件
- 随机信号分析第2版 [赵淑清郑薇编著] (部分)课后作业答案(自己写的)
- 扩展知识——JS的劫持技术
猜你喜欢

解决ssm项目上传图片后无法及时回显

Practice of Flink CDC in Dajian cloud warehouse

Based on the use of PageHelper paging plug-in in SSM project (easy to use)

Teacher Wan Jianfeng dry goods sharing July 13, 2022

蓝桥杯单片机第13届省赛题

ES6新增的变量修饰符let和const、新增的基本数据类型symbol
![[untitled]](/img/d8/a367c26b51d9dbaf53bf4fe2a13917.png)
[untitled]

Design and implementation of an eight bit compensator based on logisim

2022 gopherchina's producers and speech content have been announced···

Summary of wechat red envelope project test
随机推荐
JS数组的内置功能
Call GPU completely through torch on pycharm (the most detailed)
Collation of basic MySQL operations
JS的时间对象
Register the implementation.
几种经典功率谱密度估计方法的记录(从滤波的视角出发)
JS中的JSON(推出对象深拷贝)
Idea automatically exports SQL statements of tables in the database
39.js--作用域
ES6--对象
在线多行文本批量正则替换添加后缀工具
Use of command line client
ES6--解构赋值(重点)
类加载器+反射+Properties
ES6新增的class类
c语言中的输入输出函数之scanf函数
FTP 上传文件脚本说明
蓝桥杯单片机第13届省赛题
Data types and constraints
CONDA based operation record of starting a tensorflow GPU (2.6.0) environment on win10 from scratch (2022.07)