JavaScript-----10.作用域
1.作用域
一段程序代码中所用到的名字不是总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。目的是为了提高程序的可靠性,更重要的是减少命名冲突。
- 在es6之前,js的作用域有:全局作用域和局部作用域
- 全局作用域:整个script标签,或者是一个单独的js文件
- 局部作用域(函数作用域):在函数内部就是局部作用域,代码名只在函数内部起效果,函数之外就不起效果了。
//全局作用域
var num = 10;
console.log(num);//10
//局部作用域
function fn() {
//局部作用域
var num = 20;
console.log(num);//20
}
fn();
//由于是在不同的作用域下,上面两个同名的num不会发生冲突
2. 变量的作用域
根据作用域的不同,变量分为全局变量和局部变量
- 全局变量:在全局作用域下的变量,在全局都可以使用
注意:在函数内部没有声明而直接赋值的变量也属于全局变量
//全局变量
var num = 10; //全局变量
console.log(num); //10
function fun1() {
console.log(num); //10 全局变量在函数内部也是可以使用的
}
fun1();
//注意:在函数内部没有声明而直接赋值的变量也属于全局变量
function fun2() {
num2 = 20; //全局变量
}
fun2();
console.log(num2); //20
- 局部变量:在局部作用域下的变量,或者说是在函数内部的变量
function fun3() {
var num1 = 10; //局部变量
}
fun3();
console.log(num1); //报错 num1 is not defined
注意:函数里的形参也看作是局部变量
function fun4(aru) {
}
fun3();
console.log(aru);//aru is not defined
- 全局变量和局部变量比较
(1)只有当浏览器关闭的时候才会销毁,比较占用内存资源
(2)局部变量只有当程序执行完毕就会销毁,比较节约内存
说明:现阶段js(es5)没有块级作用域的概念,js在es6的时候才新增了块级作用域的概念。块级作用域就是用花括号{}进行包含的,如if{}、for{}等。
而java就是有块级作用域这个概念例如在java中
if (xx) {
int num;
}
//{}外面是不可以调用这个num的
js(es5)
//js(es5)中没有块级作用域的概念
if (3 < 5) {
var num = 10;
}
console.log(num);//10 顺利输出
3. 作用域链
作用域链: 内部函数访问外部函数的变量,采取的是链式查找的方法来决定取哪个值,这种结构我们称为作用域链。
var num = 10;
function fun1() {
var num = 20;
function fun2() {
console.log(num); //20 就近原则
}
fun2();
}
fun1();
3.1 作用域链案例
案例1:
//案例1:结果是几:
function f1() {
var num = 123;
function f2() {
console.log(num);//答案:123
}
f2();
}
var num = 456;
f1();
案例2:
//输出是几?
var a = 1;
function fn1() {
var a = 2;
var b = '22';
fn2();
function fn2() {
var a = 3;
fn3();
function fn3() {
var a = 4;
console.log(a); //a的值?答案:4
console.log(b); //b的值? 答案:'22'
//小技巧:站在当前的位置一层一层地往外找
}
}
}
fn1();
JavaScript-----10.作用域的更多相关文章
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- JavaScript的作用域和提升机制
JavaScript的作用域和提升机制 你知道下面的JavaScript代码执行时会输出什么吗? 1 2 3 4 5 6 7 8 var foo = 1; function bar() { i ...
- Javascript的作用域、作用域链以及闭包
一.javascript中的作用域 ①全局变量-函数体外部进行声明 ②局部变量-函数体内部进行声明 1)函数级作用域 javascript语言中局部变量不同于C#.Java等高级语言,在这些高级语言内 ...
- 深入理解Javascript变量作用域
在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数 ...
- 第一百零六节,JavaScript变量作用域及内存
JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...
- JavaScript从作用域到闭包
目录 作用域 全局作用域和局部作用域 块作用域与函数作用域 作用域中的声明提前 作用域链 函数声明与赋值 声明式函数.赋值式函数与匿名函数 代码块 自执行函数 闭包 作用域(scope) 全局作用域 ...
- javascript 之作用域-06
作用域 作用域是指变量和函数可访问范围,他规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. 作用域有两种工作模式: 静态作用域 :又称为词法作用域,在编译阶就可以决定变量的引用,由程序定义 ...
- javascript 之作用域链-07
复习作用域 上一节我们说到作用域:是指变量可以访问的范围,他规定了如何查找变量,以及确定当前执行代码对变量的访问权限:也说到静态作用域即词法作用域,是在编译阶段决定变量的引用(由程序定义的位置决定,和 ...
- 浅谈JavaScript 函数作用域当中的“提升”现象
在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的. 例如 : message = "hello JavaScript ! " ...
- Javascript的作用域和闭包(一)
一.作用域是什么? 几乎所有的编程语言最基本的功能之一,就是能够存储变量的值,并且能访问和修改这些值. 修改变量值的过程我们通常在程序执行时,称为改变一个对象的状态.有了状态,让程序变得有非常有趣. ...
随机推荐
- unity3d 随机添加树木
开放世界随机地图才是最重要的.. 随机生成树木 Terrain.terrainData //获取地形设置 terrainData.treePrototypes {get;set;} //获取或设置树木 ...
- 笔记||Python3之函数
函数: 函数的概念:就是一段代码:一段操作流程. 优点:代码量少.简洁. 维护起来方便 -- 在函数的定义进行修改 函数的定义:1 - def 函数名(): 函数内容 2 - 函 ...
- 【React】360- 完全理解 redux(从零实现一个 redux)
点击上方"前端自习课"关注,学习起来~ 前言 记得开始接触 react 技术栈的时候,最难理解的地方就是 redux.全是新名词:reducer.store.dispatch.mi ...
- Java中final修饰的数据
目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...
- 手把手教你DIY尼康ML-L3红外遥控器
项目介绍 ML-L3是用于尼康部分型号相机的无线红外遥控器,可以通过红外方式来控制快门的释放,支持B门拍摄.官方售价100RMB左右,山寨版售价10RMB左右.虽然也能实现基本的遥控功能,但是功能还是 ...
- 萌新入门Github请看这里,学不会远程教
一些废话 本文的主旨是为初次接触Github的同学提供一个入门的教程,如果你已经是Github老鸟,可以忽略本文哦,另外本文只是抛砖引玉,其实最好的教程是官方文档!!! Github官网 Github ...
- 解决在IE11浏览器下,JQuery的AJAX方法不响应问题
在项目的时候一直都是在使用谷歌浏览器在调试,后来在现场部署到服务器上的时候,客户使用的是IE浏览器,版本是11 在测试的过程中,出现几个问题,虽然是几个问题,但是问题的原因就是AJAX第一次响应,第二 ...
- 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- 更改Android设备System目录的文件的写入权限
有时候我们需要修改/system目录中文件的权限,比如将该目录下的脚本设置写入权限等,但该目录默认只有read权限,此时应该怎么办? 1.安卓设备请确保root;2.连接安卓设备,确保安卓设备打开了“ ...
- CRC校验算法的实例解析
概念 CRC校验算法,说白了,就是把需要校验的数据与多项式进行循环异或(XOR), 进行XOR的方式与实际中数据传输时,是高位先传.还是低位先传有关.对于数据 高位先传的方式,XOR从数据的高位开 ...