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 相关文章推荐
javascript 数组学习资料收集
Apr 11 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
js实现各种复制到剪贴板的方法(分享)
Oct 27 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
jQuery实现的事件绑定功能基本示例
Oct 11 jQuery
详解.vue文件解析的实现
Jun 11 Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 Javascript
Layer+Echarts构建弹出层折线图的方法
Sep 25 Javascript
JavaScript常用8种数组去重代码实例
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
与数据库连接
2006/10/09 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
python数字类型math库原理解析
2020/03/02 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
Django admin组件的使用
2020/10/24 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
python FTP编程基础入门
2021/02/27 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
高校辅导员推荐信范文
2013/12/25 职场文书
电台编导求职信
2014/05/06 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
情人节活动总结范文
2015/02/05 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers
一条 SQL 语句执行过程
2022/03/17 MySQL
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python