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 Ajax学习实例3 向WebService发出请求,调用方法返回数据
Mar 16 Javascript
javascript拓展DOM操作 prependChild insertAfert
Nov 17 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
JS获取图片lowsrc属性的方法
Apr 01 Javascript
浅谈Javascript数组的使用
Jul 29 Javascript
Google 爬虫如何抓取 JavaScript 的内容
Apr 07 Javascript
Bootstrap多级菜单的实现代码
May 23 Javascript
Vue Element使用icon图标教程详解(第三方)
Feb 07 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
Sep 26 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
JavaScript实现图片放大预览效果
Nov 02 Javascript
vue print.js打印支持Echarts图表操作
Nov 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
php中文验证码实现示例分享
2014/01/12 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
如何使用angularJs
2017/05/08 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
python3 实现对图片进行局部切割的方法
2018/12/05 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
国际贸易专业个人鉴定
2014/02/22 职场文书
日语系毕业求职信
2014/07/27 职场文书
就业协议书范本
2014/10/08 职场文书
学生打架检讨书
2014/10/20 职场文书
音乐课外活动总结
2015/05/09 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
python三子棋游戏
2022/05/04 Python