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 相关文章推荐
jquery中动态效果小结
Dec 16 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
jquery自定义函数的多种方法
Jan 09 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
Apr 18 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
默认浏览器设置及vue自动打开页面的方法
Sep 21 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 Javascript
微信小程序实现可长按移动控件
Nov 01 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
Python制作爬虫抓取美女图
2016/01/20 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
预备党员思想汇报范文
2013/12/29 职场文书
单位领导证婚词
2014/01/14 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
终止劳动合同协议书
2014/04/14 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
法制主题班会教案
2015/08/13 职场文书
聘任书范文大全
2015/09/21 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python