当前位置: 首页 > news >正文

JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域

文章目录

前言

一:函数作用域


前言

        我们刚才提到了,在<Script>标签当中进行定义的变量、对象、函数对象都属于全局作用域,全局作用域在页面打开的时候生效在页面关闭的时候失效。

一:函数作用域

        调用函数时创建函数作用域,函数执行完毕之后作用域销毁。

        没调用一次函数就会生成一个新的函数作用域。

var a = 10;function fun(){console.log(a);//10
}

        函数作用域是局部的,在函数作用域当中可以访问到全局作用域的变量。

function fun(){var b = 10;console.log(b);
}console.log(b);//这里会报错。

        这样写就有问题了,全局无法访问局部的内容。

var a = 100;function fun(){var a = 10;console.log(a);//10
}console.log(a);//100

        当我们在函数作用域当中操作一个变量时,会先在自身作用域当中进行寻找。如果没有就前往上一级进行寻找。

        上一级不一定是全局哦。函数里边嵌套函数的这种情况,里边的函数的上一级就是外层函数的作用域。

function fun(){var a = 100;var b = 10;function fun2 (){console.log(a);}}

        层层往上级进行寻找如果还是没有的话,就该报错了。如果想在函数中想访问全局的,在变量名字前添加window就行了。

        在函数作用域当中使用var声明的变量也有一个声明提前的作用:

function fun(){console.log(a);//undefinedvar a = 35;
}fun();

        也就是在函数声明也会在函数中所有的代码执行之前被声明,但是没有赋值。

var c = 35;
function fun(){console.log(c);//35
}
fun();

        但是如果是这样则另当别论了:

var c = 10;function fun(){console.log(10);//undefinedvar c = 20;
}fun();

        这个打印的结果最终是undefined,因为同样的变量C有去全全局的有函数作用域的肯定使用函数作用域的,函数作用域的基于var声明的会被提前但是不被赋值。所以打印的是undefined。

        那么如果不使用var呢?

var c = 35;function fun(){console.log(10);c = 100;
}

        这个用C的时候找不到就往上级去找,然后最终打印的记过是35

function fun(){d = 100;
}console.log(d);//100

        在函数中不使用var修饰的话,会被声明为全局变量。

var e = 23;function fun(e){alert(e);
}fun();

        定义了形参就相当于在函数当中基于var声明了变量

http://www.lryc.cn/news/184556.html

相关文章:

  • 开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)
  • [C]嵌入式中变量存储方案
  • 热迁移中VirtIO-PCI设备的配置空间处理
  • 模拟滤波器的基础知识和设计
  • 机器学习基础-Pandas学习笔记
  • 【GIT版本控制】--协作流程
  • 简析Cookie、Session、Token
  • 加速attention计算的工业标准:flash attention 1和2算法的原理及实现
  • 小程序获取用户手机号
  • Zama的fhEVM:基于全同态加密实现的隐私智能合约
  • Mac M1安装ROS1或ROS2
  • [NISACTF 2022]popchains - 反序列化+伪协议
  • 分贝定义简介
  • socket简介
  • 【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023
  • 七、互联网技术——SQL查询
  • 1.6 计算机网络的性能
  • 小程序中如何核销订单和优惠券
  • 211 毕业就入职 30 人的小公司是什么体验
  • aardio 读取 Excel文件,显示在 listview 中
  • Web:前端常用的几种Http请求GET和POST样例
  • clickonce 发布的winform 如何CA认证?
  • #力扣:13. 罗马数字转整数@FDDLC
  • React18入门(第一篇)——JSX、TSX语法详解
  • 【计算机基础知识】字符的编码表示
  • 【面试题精讲】Java字符型常量和字符串常量的区别?
  • 【Vue面试题六】为什么Vue中的 v-if 和 v-for 不建议一起用?
  • leetCode 674. 最长连续递增序列 动态规划 / 贪心策略
  • 数据中台实战(11)-数据中台的数据安全解决方案
  • 林沛满-TCP之在途字节数