Javascript我学之四作用域
2024-10-14 22:42:46
本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘
作用域
JavaScript的变量作用域只有两种,全局作用域和函数作用域。
函数的作用域
函数中定义的变量是私有的,仅在本函数范围内有效,称为“函数作用域”。
//每个函数,都定义了一个作用域
function add(num1, num2) {
var sum = num1 + num2;
return sum;
}
console.info(add(, )); //
console.info(sum); //出错!
块作用域与同名变量
JavaScript是没块作用域的
function doSomething(doIt) {
var color = "blue";
if (doIt) {
var color = "red";
console.info("在条件语句中的Color=" + color);
}
console.info("在条件语句外的Color=" + color);
}; doSomething(false); //在条件语句外的Color=blue
doSomething(true); //在条件语句中的Color=red,在条件语句外的Color=red
在if()语句块中定义的color变量,与外部定义的color同名,所以是同一个变量,这是因为javascript并没有块作用域。这与java,c#是不一样的。
变量提升(Hoist)
编译器把函数中后部定义的变量统一移到函数开头进行定义
//hoist: 变量提升
var v = "hello";
(function () {
//输出undefined
console.info(v);
var v = "world";
})();
等价于
var v = "hello";
(function () {
var v;
console.info(v);
v = "world";
})();
所以在函数中定义变量时,要在函数开头集中定义变量,不要在“中途”“临时想起来”地定义变量。
嵌套函数可访问的变量
嵌套的函数,内部函数可以访问外部函数定义的变量,也能访问全局变量
//嵌套函数的变量访问
var world = "world ";
function sayHello() {
var hello = "Hello ";
function inner() {
var info = " in inner function";
console.info(hello + world + info);
}
inner();
}
sayHello(); //hello world in inner function
再谈同名变量
定义变量时,一定要使用var!如没写,就会是全局变量.
var myColor = "red";
//输出:myColor before myFunc() red
console.info("myColor before myFunc()", myColor);
function myFunc() {
//这里有没有var,很关键! 没写var, mycolor就变成全局变量
var myColor = "blue ";
//输出:myColor inside myFunc() blue
console.info("myColor inside myFunc()", myColor);
}
myFunc();
//输出:myColor after myFunc() red
//当第6行去掉var时,这里输出:myColor after myFunc() blue
console.info("myColor after myFunc()", myColor);
变量的查找过程
自下而上,由内至外
//变量的查找过程
var color = "blue";
function outer() {
function getColor() {
return color;
}
console.info(getColor()); //blue
};
outer();
最新文章
- [PAT]素因子分解(20)
- 【C语言学习】《C Primer Plus》第11章 字符串和字符串函数
- 外网主机访问虚拟机下的web服务器(NAT端口转发)
- JQuery.Ajax()的data参数类型
- Web的Ajax应用开发模式(三)——Ajax的开发
- 67. Container With Most Water
- [CS231n-CNN] Backpropagation(反向传播算法)
- ECMAScript 发展历史
- 常用的50条linux 命令
- SpringMVC(一)——流程框架总体介绍
- Android测试TestSuite的执行方法
- python2.x 使用protobuf
- Android异步处理技术
- js 抛物线 笔记备份
- 谈谈JAVA中的安全发布
- 2018 Multi-University Training Contest 1
- 3星|《CMO到底能干多久?》:CEO必须决定供公司需要哪类CMO
- New Year Tree 【DFS序+线段树区间查询修改+二进制保存状态】
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
- TortoiseSvn 取消忽略的文件
热门文章
- bzoj 3223: Tyvj 1729 文艺平衡树 (splay)
- 11.4 Flask session,闪现
- Python--Linux上安装Python
- Flink部署-standalone模式
- MySQL_列值为null对索引的影响_实践
- 金融量化分析【day111】:Matplotib-画布与子图
- Hadoop记录-JMX参数
- centos7防火墙设置
- DirectX11 With Windows SDK--09 纹理映射与采样器状态
- [物理学与PDEs]第5章习题7 各向同性材料时稳定性条件的等价条件