javascript 作用域详解

作用域理解:定义的变量、函数生效的范围。javascript 有全局作用域和函数作用域两种。

注:es6实现let 块级作用域不是js原生的,底层同样是通过var实现的。如果想了解具体细节,请访问babel官方 对es6中let 进行解析。

执行上下文

范围:一段内或者一个函数内;
全局:函数声明、变量声明 。范围:;
函数:函数声明、变量声明、this、arguments。范围:一个函数内部;

函数、变量声明提升

        foo(); //打印a        var foo = 1;        function foo (){            console.log(’a‘)        };        console.log(foo); //1//实际的执行顺序为        function foo(){  //函数声明优先于变量的声明            console.log("a");        }        //var a ;  重复声明,这儿被省略了。        foo(); //打印a        foo = 1;  //给foo赋值为1        console.log(foo); //1

登录后复制

当js引擎执行一个 执行上下文代码块时,执行顺序为:
1.函数声明 function a(){};(函数优先) 注:let a = function (){}; 这是变量的声明和赋值,不是函数的声明。
2.变量声明 var a; 注:刚开始只对变量进行声明,没有进行赋值,如果 在赋值之前使用到这个变量 值为:undefined。
3.执行上下文为函数作用域时:确定this和arguments。
4.按照js单线程和异步策略依次执行 作用域中的代码。

我们习惯将 var a = 2; 看作一个声明,而实际上 JavaScript 引擎并不这么认为。它将 var a和 a = 2 当作两个单独的声明,第一个是编译阶段的任务,而第二个则是执行阶段的任务。这意味着无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理。可以将这个过程形象地想象成所有的声明(变量和函数)都会被“移动”到各自作用域的最顶端,这个过程被称为提升。要注意避免重复声明,特别是当普通的 var 声明和函数声明混合在一起的时候,否则会引起很多危险的问题!

立即学习“Java免费学习笔记(深入)”;

作用域链

自由变量:当前作用域没有定义的变量,但是上层作用域定义了,可以在此层作用域中使用的变量。
作用域链:当使用一个变量时候,先在自己的作用域里找,如果没有找到,再到父级作用域找,一直找到全局作用域,如果都没有找到即报错。

块级作用域

js无块级作用域,仅有全局作用域和函数作用域两种作用域。
ES6 通过对全局作用域的特殊实现,实现了js的块级作用域 let;
let 的生效范围为 { };
const 为定义常量。注:定义的常量的值存储的内存地址不可变动,值是可变的比如常量中定义的是数组 或者对象时候,可以通过数组或对象方法操作原数据,只要不重新赋值就没问题。

以上就是javascript 作用域详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2730946.html

(0)
上一篇 2025年3月8日 00:23:04
下一篇 2025年2月28日 18:13:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 学javascript要什么基础?

    学习JavaScript需要有HTML和CSS的基础。学习javasctipt之前需要先学习一下HTML+CSS,因为javascript的基本操作就是控制html的标签以及css的属性,实现各式各样的动态功能。 JavaScript一种直…

    2025年3月8日
    200
  • JavaScript加载:defer与async

    页面的解析过程是单线程的,但是单线程亦可有同步与异步之分,script标签的解释方式分为3种,默认、defer和async三种 登录后复制登录后复制登录后复制登录后复制 默认模式,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 s…

    2025年3月8日
    200
  • jquery框架是什么?

    相信应该有一部分朋友听说过jquery吧,但是你了解它吗?你知道他是用来干嘛的吗?下面我将和大家一起谈谈什么是jquery框架。 jQuery就是一个快速、简洁的JavaScript框架。 jQuery,顾名思义是JavaScript和查询…

    2025年3月8日
    200
  • js中null是什么意思?

    在javascript中存在这样两种原始类型:null与undefined。这两种类型常常会使javascript的开发人员产生疑惑,null和undefined分别是什么意思呢? Null类型只有一个值,即null。null用来表示尚未存…

    2025年3月8日
    200
  • 学js需要什么基础?

    javascript一种直译式脚本语言,简称js,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为javascript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html网页上使用,用来给html网页增加…

    2025年3月8日
    200
  • js全称是什么?

    js全称为javascript,是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。 javascript的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用…

    2025年3月8日
    200
  • javascript有什么用?

    JavaScript是一种轻量级的解释型编程语言,它旨在创建以网络为中心的应用程序;它与Java互补并集成在一起。JavaScript非常容易实现,因为它与HTML集成在一起;它是开放和跨平台的。 javascript有什么用? 1、使网页…

    2025年3月8日
    200
  • js是什么语言

    js全称Javascript,是一种高级的、解释型、直译式脚本语言,是一种基于原型、函数先行的语言,是一门多范式的语言;它是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览…

    2025年3月8日
    200
  • Node.js fs是什么

    在Node.js中,fs全称filesystem,中文意思为“文件系统”,指的是fs模块。fs模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装;fs模块几乎对所有操作提供异步和同步两种操作方式,供开发者选择。 Node …

    2025年3月8日
    200
  • js中的var是什么意思

    javascript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。js中的var是起声明作用,可以声明变量等。下面和小编一起详细了解一下吧。 var作用:声明作用;如声明个变量。 语法   var c = 1; …

    2025年3月8日
    200

发表回复

登录后才能评论