首页 > 其他分享 >js的作用域

js的作用域

时间:2023-12-28 23:56:47浏览次数:22  
标签:console 函数 作用域 js fa log

全局作用域

全局作用域是指代码中任何地方都可以访问的变量,在整个应用程序中都是可见的

局部作用域(函数作用域)

局部作用域是指在函数内部定义的变量,它们只能在函数内部访问,函数外部无法访问

块级作用域

这是一个特殊的作用域,在es6之前,js中没有块级作用域。
在es6中,使用let和const关键字可以创建块级作用域。
块级作用域是指在代码块(通常指花括号包含的语句集合)中定义的变量,只能在代码块内部访问,代码块外部无法访问。

let和const不存在变量提升,这是因为let和const存在暂时性死区。

console.log(a); // 报错  Cannot access 'a' before initialization
let a = 1;

什么是暂时性死区(temporal dead zone,简称 TDZ)呢?
暂时性死区是一种语法,即在代码块内,使用let或const声明变量之前,该变量都是不可用的。

拓展

1.变量提升

变量提升是js的一个重要特性

// 代码顺序
console.log(a); // undefined
var a = 1;

// 执行顺序: js将变量提升到作用域顶部,并且是未赋值状态
var a;
console.log(a);
a = 1;

2.函数提升

函数也存在提升现象,这也解释了为什么js中可以在定义函数之前就可以调用

// 代码顺序
console.log(fn());  // 1
function fn() {
  return 1;
}

// 执行顺序: js将函数提升到作用域顶部
function fn() {
  return 1;
}
console.log(fn());

注意:与function声明的函数不同,使用函数表达式定义的函数的提升规则,遵从的是变量提升的规则

// 代码顺序
console.log(f);
var f = function fn() {
  return 1;
};

// 执行顺序: js将函数提升到作用域顶部
var f;
console.log(f); // undefined
f = function fn() {
  return 1;
};
// 通过赋值后才可以正常调用
console.log(f());

注意:在相同作用域内,如果变量名和函数名一样,提升的时候,变量的声明会被函数覆盖

// 代码顺序
console.log(fa);
var fa = 1;
console.log(fa);
function fa() {
  return 1;
}
console.log(fa);

// 执行顺序: js将函数提升到作用域顶部
function fa() {
  return 1;
}
console.log(fa); // 函数体
fa = 1;
console.log(fa); //1
console.log(fa); // 1

标签:console,函数,作用域,js,fa,log
From: https://www.cnblogs.com/youbiaokachi/p/17933843.html

相关文章

  • .NET 6 控制台程序(Console)读取配置appsettings.json配置文件
    ​ 1、添加引用Microsoft.Extensions.Configuration.Json添加引用 Microsoft.Extensions.Configuration.Json,引用方法可以参考:1)使用Nuget界面管理器搜索"Microsoft.Extensions.Configuration.Json"在列表中分别找到它,点击"安装"相关文档:VS(VisualStudio)中Nuget的使用......
  • Spring BeanFactoryAware 解决 prototype 作用域失效问题
    跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click在Spring中,如果一个singletonbean依赖了一个prototypebean,那么这个prototypebean在初始化时只会被创建一次,这就是所谓的"prototypescope失效"的问题......
  • 初见threejs
    threejs底层封装了强大的webGL技术,让开发者们可以开箱即用(其实也并非开箱即用,还是挺麻烦的......
  • Unity解析key不确定的Json
    遇到Json的key不固定时,只需要解析value,如下Jsondata下的key(1和2)是变化的:{"status":1,"msg":"success","data":["1:":{"atitle":"test",......
  • SwiftUI 中Webview与JS交互
    iOS中WKWebview原生与网页端JS交互常用的方法是首先在webview中注入标定好的方法名,例如标定一个request方法letconfig=WKWebViewConfiguration()letuserContent=WKUserContentController();  vardealMessage=DealMessage()userContent.add(dealMessage,name:......
  • 前端那些好用的CSS/JS网站
    ......
  • 在nodejs环境里使用canvas和sharp生成图片
    1.安装依赖包npminstalljsdomcanvas2.实例代码const{JSDOM}=require('jsdom');const{createCanvas}=require('canvas');//创建一个虚拟DOM环境constdom=newJSDOM('<!DOCTYPEhtml><html><head></head><body>&......
  • phantomjs selenium 如何动态修改代理?
    在使用PhantomJS和Selenium进行网页爬取时,动态修改代理可以通过使用Selenium的WebDriver的service_args参数来实现。以下是一个基本的示例,演示了如何在PhantomJS中动态修改代理:fromseleniumimportwebdriver#设置PhantomJS的可执行文件路径phantomjs_path='/......
  • vuejs+echarts实现时间轴
    1、效果图2、具体需求描述①可以设置时间轴起始值;②时间轴可以缩放、左右拖动;③鼠标移入时间轴显示当前刻度信息;④点击时间轴时添加蓝色图标,鼠标移入图标显示此时图标信息且隐藏刻度信息,按住图标可以拖动图标;3、实现①结构代码<divid="timeAxisEchart"style="width:10......
  • vuejs+echarts实现x轴为时间轴且数据区域可缩放
    1、效果图2、具体功能描述①选择的时间为时间轴的开始和结束时间;②鼠标可以左右拖动x轴时间轴;③鼠标放入图表中可以缩放数据,x轴会相应的更改当前坐标轴间隔值,最小间隔值为1分钟,最大间隔值为1年,且在缩放时可以获取到数据窗口范围的起始数值;④点击y轴名称会对相应数据显示隐......