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 相关文章推荐
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
javascript语言结构小记(一)
Sep 10 Javascript
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
Aug 28 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
Feb 23 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 Javascript
微信小程序实现滚动加载更多的代码
Dec 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
PHP伪造referer实例代码
2008/09/20 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
Python 字典与字符串的互转实例
2017/01/13 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
浅析Python 条件控制语句
2020/07/15 Python
Python 多进程、多线程效率对比
2020/11/19 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
外贸业务员的岗位职责
2013/11/23 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
中小学生学籍证明
2014/10/25 职场文书
土建施工员岗位职责
2015/04/11 职场文书
个人合作协议范本
2015/08/06 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫