JS中的变量作用域(console版)


Posted in Javascript onJuly 18, 2020

作用域说明:指一个变量的作用范围

1.全局作用域

(1) 全局作用域在页面打开时被创建,页面关闭时被销毁
(2) 编写在script标签中的变量和函数,作用域为全局,在页面的任意位置都可以访问到
(3) 在全局作用域中有全局对象window,代表一个浏览器窗口,由浏览器创建,可以直接调用
(4) 全局作用域中声明的变量和函数会作为window对象的属性和方法保存

var a = 10;
b = 20;
function an(){
  console.log('an')
}
var bn = function(){
  console.log('bn')
}
console.log(window)

如图,变量a,b和函数an,bn都保存在window对象上

JS中的变量作用域(console版)

(5) window对象的属性和方法可以直接调用,如window.an() 可以写为 an()

2.函数作用域:

(1) 调用函数时,函数作用域被创建,函数执行完毕,函数作用域被销毁

function an(){
    var s = 'an'
    console.log(s);
}
//an();

此时函数an并没有执行,作用域没有创建,当函数执行时,作用域创建,输出结果an

an();

JS中的变量作用域(console版)

(2) 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的

(3) 在函数作用域中可以访问到全局作用域的变量,在函数外无法访问到函数作用域内的变量

function an(){
  var s = 'an'
  console.log(s);
}
an();
console.log(s); // 此时,程序会从当前作用域和上级作用域及以上作用域中寻找变量s,并不会去下级作用域中寻找

JS中的变量作用域(console版)

(4) 在函数作用域中访问变量、函数时,会先在自身作用域中寻找,若没有找到,则会到函数的上一级作用域中寻找,一直到全局作用域
(5) 在函数作用域中也有声明提前的特性,对于变量和函数都起作用,此时函数作用域相当于一个小的全局作用域,详细声明提前请看声明提前部分

an();
bn();
function an(){
    var s = 'an'
    console.log(s);
}
var bn = function(){
    console.log('bn')
}

下图就结果中,an()可以正常执行,函数an()提升并创建了,函数bn的变量名提升了,但是为赋值,此时bn不是函数

JS中的变量作用域(console版)

(6) 在函数作用域中,不使用变量关键字声明的变量,在赋值时会往上一级作用域寻找已经声明的同名变量,直到全局作用域时还没找到,则会成为window的属性

an(); // 输出结果 bn
function an(){
  var b = 'bn';
  function bn(){
    console.log(b); 
	b = 'bn2';  // b会往上一级寻找已经声明的同名变量,并赋值,直到全局作用域时还没找到,则会成为window的属性
  }
  bn();
  console.log(b); // 输出 bn2
}

(7) 在函数中定义形参,等同于声明变量

function an(name){
  console.log(name); // 输出 undefined
}
an();

等同于

function an(){
  var name
  console.log(name); // 输出 undefined
}
an();

到此这篇关于JS中作用域以及变量范围的文章就介绍到这了,更多相关JS作用域内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
用apply让javascript函数仅执行一次的代码
Jun 27 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
Oct 30 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
js匿名函数的调用示例(形式多种多样)
Aug 20 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
Oct 28 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
详解Vue2.0 事件派发与接收
Sep 05 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
原生js滑动轮播封装
Jul 31 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
Sep 09 Javascript
js里面的变量范围分享
Jul 18 #Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 #Javascript
深入理解 ES6中的 Reflect用法
Jul 18 #Javascript
详谈Object.defineProperty 及实现数据双向绑定
Jul 18 #Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
Jul 18 #Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 #Javascript
完美解决通过IP地址访问VUE项目的问题
Jul 18 #Javascript
You might like
PHP $_SERVER详解
2009/01/16 PHP
一个PHP的String类代码
2010/04/20 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
Python 面试中 8 个必考问题
2018/11/16 Python
详解Python循环作用域与闭包
2019/03/21 Python
下载官网python并安装的步骤详解
2019/10/12 Python
Pytorch之Variable的用法
2019/12/31 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
keras K.function获取某层的输出操作
2020/06/29 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
社区党建工作方案
2014/06/10 职场文书
2015年校务公开工作总结
2015/05/26 职场文书