一、在ES5中,js 的作用域

js作用域,只有全局作用域与函数作用域,没有块级作用域。

1、全局作用域


var a = 10;
function aaa() {
alert(a)
} function bbb(){
var a=20;
aaa()
} bbb(); //

a =10 是全局的  而a=20 是局部的

2、变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层。

var a=10
function aaa(){
alert(a);
var a=20
} aaa(); // undefined,一是预解析,二是就近查找。
var a = 10
function aaa(){
alert(a)
a=20
}
aaa(); //

这个虽然是就近原则,但是就近找var声明的变量,因为a= 20  没有var声明,只是修改了a 的值,所以到外面去找了,输出的是10。不过没错的是a=20后,a确实为20了,只不过alert的时候还没有执行到那~~

var a = 10
function aaa(){
a=20
alert(a)
}
aaa(); //

3、全局作用域与函数作用域:

var a=10
function aaa(){
bbb();
alert(a);
function bbb(){
var a=20
}
}
aaa(); //

4、当参数跟局部变量重名时,优先级是等同的。

var a=10;
function aaa(a){
alert(a)
var a= 20;
}
aaa(a) // 10

js 中传参时,基本类型传值,引用类型传引用。

 var a = 5;
var b=a;
b +=3
alert(a); //
var a = [1,2,3]
var b=a;
b = [1,2,3,4];
alert(a); //[1,2,3]
var a = [1,2,3]
var b=a;
b.push(4);
alert(a); //[1,2,3,4]

参数与变量一样也是有作用域:

var a=10;
function aaa(a){
a +=3
}
aaa(a)
alert(a) // 10
var a=10;
function aaa(a){
a +=3
alert(a)
}
aaa(a)
// 13

var a= [1,2,3]
function aaa(a){
a=[1,2,3,4]
}
aaa(a)
alert(a) // 1,2,3
var a= [1,2,3]
function aaa(a){
a.push(4)
}
aaa(a)
alert(a) // 1,2,3,4
 

二、es6 中,块级作用域

块作用域由{ }包括,if语句和for语句里面的{ }也属于块作用域。

1、块作用域,var的变量外部是可以访问的。

{
var a= 1;
console.log(a) //
} console.log (a) // ( function A() {
var b=2;
console.log(b) //
}) (); console.log(b); //报错 if(true){
var c=3
} console.log(c) //

2、 var 、 let 、 const 区别

var定义的变量,没有块的概念,可以垮块访问,不能跨函数访问;

let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问;

const 用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

<script type="text/javascript">
// 块作用域
{
var a = 1;
let b = 2;
const c = 3;
// c = 4; // 报错
var aa;
let bb;
// const cc; // 报错
console.log(a); //
console.log(b); //
console.log(c); //
console.log(aa); // undefined
console.log(bb); // undefined
}
console.log(a); //
// console.log(b); // 报错
// console.log(c); // 报错 // 函数作用域
(function A() {
var d = 5;
let e = 6;
const f = 7;
console.log(d); //
console.log(e); // 6 (在同一个{ }中,也属于同一个块,可以正常访问到)
console.log(f); // 7 (在同一个{ }中,也属于同一个块,可以正常访问到) })();
// console.log(d); // 报错
// console.log(e); // 报错
// console.log(f); // 报错
</script>

js作用域总结的更多相关文章

  1. JS作用域面试题总结

    关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...

  2. js作用域问题

    <script type="text/javascript"> alert(i);//Uncaught ReferenceError: i is not defined ...

  3. js 作用域

    js 作用域 js作用域链查找,子函数能取到父函数中定义的变量. 前段时间误写成如下形式: 这只是普通的函数调用,没有父子的关系,child()函数会在全局查找pi变量,没找到所以报错. 最近发现原来 ...

  4. 08.01 签到! js 作用域

    js 作用域 : 1.js 没有块作用域 : for (var i = 0;i < 4; i++){ } alert(i) // i = 3 2.js 没有动态作用域: function f1( ...

  5. js作用域链

    js作用域链 <script> var up = 555; function display(){ var innerVar = 2; function inner(){ var inne ...

  6. easyui datagrid load 封装 参数问题 js 作用域

    var temp = { LoginAccount: $('#LoginAccount').val(), ShopName: $('#ShopName').val() }; function doSe ...

  7. js作用域零碎的知识点,不同的script块,虽然同是全局变量

    如下代码,第一次弹出a,因为解析器里找到var a,赋予a变量undefined,弹出undefined <!DOCTYPE html> <html> <head> ...

  8. JS作用域,作用域,作用链详解

    前言   通过本文,你大概明白作用域,作用域链是什么,毕竟这也算JS中的基本概念. 一.作用域(scope) 什么是作用域,你可以理解为你所声明变量的可用范围,我在某个范围内申明了一个变量,且这个变量 ...

  9. JS作用域和ASP(vbs)作用域比较

    一.js作用域,先上图: 以上代码执行的效果是,依次弹出 undefined, undefined, a, a,为什么是这样的结果啦?因为JS的作用域为链式作用域. 作用域链: 用VAR声明一个变量时 ...

  10. js作用域对象与运用技巧

    1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使 ...

随机推荐

  1. 从需求的角度去理解Linux系列:总线、设备和驱动

    笔者成为博客专家后整理以前原创的嵌入式Linux系列博文,现推出以让更多的读者受益. <从需求的角度去理解linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文 ...

  2. softmax函数python实现

    import numpy as np def softmax(x): """ 对输入x的每一行计算softmax. 该函数对于输入是向量(将向量视为单独的行)或者矩阵(M ...

  3. 转: Syslog协议介绍

    转: http://liu-hliang.iteye.com/blog/827392 在网上搜的文章,写的很全乎.摘抄如下,供大家参考学习 1.介绍 在Unix类操作系统上,syslog广泛应用于系统 ...

  4. MySQL5.6安装图解(windows7/8_64位)

    这篇文章主要内容是关于MySQL5.6安装图解,希望通过这篇文章顺利解决大家安装MySQL5.6的问题,再也不用为了安装烦恼. 1. 下载MySQL2. 解压MySQL压缩包将以下载的MySQL压缩包 ...

  5. java web邮件收发

    1.网上方法要导入两个包 mail.jar&activation.jar package com.zjh.shopping.util; import java.util.Date; impor ...

  6. 分享个免费的货币汇率API

    先上API文档链接:https://www.juhe.cn/docs/api/id/23,支持人民币牌价.外汇汇率查询:数据仅供参考,交易时以银行柜台成交价为准. 人民币牌价 接口地址:http:// ...

  7. ps快捷键记录

    alt+delete  前景色填充 ctrl+delete  背景色填充 alt+shift+鼠标调节  变换选取,做圆环 ctrl+t  自由变换 alt+鼠标拖动  快捷复制某区域 delete ...

  8. Android学习笔记(36):Android的两种事件处理方式

    Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...

  9. java类库中的设计模式

    原帖:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns 提问:我正在学习GoF的<设计模式&g ...

  10. 转:RC复位电路的原理及其复位时间的计算

    RC复位电路的原理及其复位时间的计算   低电平有效复位电路如下 此复位电路是针对低电平有效复位而言的,其中二极管是起着在断电的情况下能够很快的将电容两端的电压释放掉,为下次上电复位准备. 假设电容两 ...