javascript作用域、预解析笔记
2024-10-01 14:35:46
1、作用域
一般情况下,一段代码中所用到的名字并不总是有效可用的,
而限定这个名字(变量)的可用性的代码范围就是这个名字的作用域,可用有效的减少变量名冲突
2、js的作用域(es6)之前:全局作用域,局部作用域
3、全局作用域:整个script标签 或者是单独的JS文件
4、局部作用域(函数作用域),在函数内部就是局部作用域,这个变量名只能在函数内部使用
5、变量作用域
根据作用域的不同,变量分为全局变量,局部变量
注意
如果在函数内部没有声明直接赋值的变量也叫全局变量
函数的形参也是局部变量
全局变量:只有浏览器关闭的时候才会销毁,比较占内存
局部变量:当程序执行完毕就会销毁,比较节约内存
6、现阶段JS没有块级作用域
在es6中有块级作用域
块级作用域 {} if{} for{}
7、作用域链
内部函数访问外部函数 采用的就是链试这种结果就是作用域链 (就近原则)
预解析
先预解析 然后执行代码
JS引擎会把var和function全部提到当前作用域的最前面然后按照代码的顺序从上往下执行
预解析分为 变量预解析 和 函数预解析
变量提升~~~~~~ 变量声明提升到当前作用域的最前面 不提升赋值操作
函数提升~~~~~~ 函数声明提升到当前作用域的最前面 不调用函数
函数表达式函数的调用必须写在函数表达式函数的下面
// 局部变量
function fn() {
var num = 9;
console.log(num);
}
fn() // 作用域链
var num = 7; function fn1() { // 外部函数
var num = 3; function fn2() { // 内部函数 内部函数可以访问外部函数
console.log(num);
var sum = 4;
}
fn2()
}
fn1() console.log(num1); //坑1
var num1 = 80 fun() //坑2
var fun = function () {
console.log(66); } // 经典预解析案例
f1()
console.log(c);
console.log(b);
console.log(a); function f1() {
var a = b = c = 9;
// 相当于var a=9;b=9;c=9 b,c 没有声明直接赋值就是全局变量
console.log(a);
console.log(b);
console.log(c);
}
// 99999 a is not defined
最新文章
- 面筋BD
- Matlab 视频与图像之间的相互转换
- apache 局域网访问
- 移植SlidingMenu Android library,和安装example出现的问题解决
- html5画布的旋转效果
- XMl各种格式转换功能代码
- paip.字符串操作uapi java php python总结..
- delphi 在 DragDrop 的时候,滚动 TreeView
- C++基类和派生类之间的转换
- Spring 学习笔记01
- php基础知识(很简单一套适合零基础的朋友学习)
- Android_scaleType属性
- Python之匿名函数
- python select.select模块通信全过程详解
- nexus2 配置
- CSS实现左侧多级菜单栏
- 《mysql必知必会》学习_第15章_20180806_欢
- ListView优化中的细节问题
- 【Matplotlib】利用Python进行绘图
- hbase-java-api002(flush)
热门文章
- java 数据结构(八):Iterator接口与foreach循环
- 数据可视化之PowerQuery篇(六)PowerQuery技巧:批量合并Excel表的指定列
- 没内鬼,来点干货!SQL优化和诊断
- vue :关于引用jquery的二三问题
- 时间序列知识图谱-《利用Python进行数据分析》
- HTTP请求方式及常见问题
- ant design pro/前端/JS:实现本地运行https
- linux实现shell脚本监控磁盘内存达到阈值时清理catalina.out日志
- vue学习(十) v-for循环普通数组 、对象数组、 迭代数字
- kylin streaming原理介绍与特点浅析