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 Event学习第七章 事件属性
Feb 07 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
浅析JQuery中的html(),text(),val()区别
Sep 01 Javascript
Jquery中find与each方法用法实例
Feb 04 Javascript
JS表格组件神器bootstrap table详解(强化版)
May 26 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
vue中keep-alive的用法及问题描述
May 15 Javascript
Babel 入门教程学习笔记
Jun 13 Javascript
vue实现简单学生信息管理
May 30 Javascript
如何用JS实现简单的数据监听
May 06 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
建立动态的WML站点(一)
2006/10/09 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
Python3实现购物车功能
2018/04/18 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
python 字符串追加实例
2019/07/20 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
详解python中的lambda与sorted函数
2020/09/04 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
python实现代码审查自动回复消息
2021/02/01 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
目标管理责任书
2014/04/15 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
捐书活动倡议书
2015/04/27 职场文书
工程进度款催款函
2015/06/24 职场文书
公司老总年会致辞
2015/07/30 职场文书
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python