概述
一.全局作用域
- 变量的声明 直接在script中声明就是全局变量 与window属性挂钩
console.log(window.a); //undefind 因为a提升到了顶部,赋值还在原位置,所以等于undefind
var a = 1
console.log(window.a); //1 window可省略
- 注意:let const 不与window挂钩 指向undefind
- 函数的声明
foo() //Function foo 函数提升到了顶部
function foo(){
console.log('Function foo');
}
foo() //Function foo
foo2() //foo2 is not function 因为foo2提升到了顶部,赋值还在原位置所以等于undefind
var foo2 = function(){
console.log("Function foo2");
}
foo2() //Function foo2
二,函数作用域
- 在函数内部声明的变量又叫局部变量
(function(){
--------直接声明函数---------
asc() //123456 直接声明函数会提升到函数作用域顶部
function asc(){
console.log("123456");
}
asc() //123456
----------赋值声明函数----------
asc2() // asc2 is not function //因为asc2 提升到了函数作用域顶部
var asc2 = function(){
console.log("123456789");
}
asc2() // 123456789
}())
- 注意,如果变量提升和函数提升同时在的话 函数优先
三,块级作用域
- 抛开let var const 在块内声明变量
console.log(b);//b is not defined
{
console.log(b);//b is not defined
b = 3
console.log(b); //3
}
console.log(b); // 3
- 当抛开const var let 环境的时候 块内默认声明的变量必须执行完代码块的内容才会有效 window才会有b这个属性
- 块级作用域变量的声明
console.log(a); //undefined 重新声明个var a = undefined
{
console.log(a); //undefined a提升到了块级作用域顶部 赋值留在原位置
var a = 1
}
console.log(a); // 1 为全局a赋值
- 块内定义的变量会被提升到全局 也会提升到块级作用域顶部 重新声明个关键次 赋值undefined,执行完块内变量后重新赋值
- 问题来了,下面一句代码很诧异
console.log(a); //undefind
{
function a(){}
}
- 输出
undefined
还记得块内的默认变量吗?它如果这样子写会报错的,但是函数声明就不会,因为正如阮一峰老师那篇文章所说
最后
以上就是大意音响为你收集整理的超易懂全局作用域 函数作用域 块级作用域一.全局作用域二,函数作用域三,块级作用域的全部内容,希望文章能够帮你解决超易懂全局作用域 函数作用域 块级作用域一.全局作用域二,函数作用域三,块级作用域所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复