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的tab切换 js原理
Apr 01 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
javascript省市区三级联动下拉框菜单实例演示
Nov 29 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
Dec 14 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
weebox弹出窗口不居中显示的解决方法
Nov 27 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 Javascript
javascript canvas时钟模拟器
Jul 13 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实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
js 幻灯片的实现
2011/12/06 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
Vue波纹按钮组件制作
2018/04/30 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python中zip和unzip数据的方法
2015/05/27 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
详解Python打包分发工具setuptools
2019/08/05 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
餐饮加盟计划书
2014/01/10 职场文书
小班下学期个人总结
2015/02/12 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
java实现面板之间切换功能
2022/06/10 Java/Android