JS基础-变量作用域

简介: 在JavaScript中,var定义变量实际是有作用域的。 假设在函数体中声明,则在函数体外不可以使用~(闭包)

var作用域

在JavaScript中,var定义变量实际是有作用域的。 假设在函数体中声明,则在函数体外不可以使用~(闭包)

function xitu(){
    var x=1;
    x=x+1;
}
x=x+2; //Uncaught ReferenceError: x is not defined
  • 如果两个函数使用了相同的变量名
  • 内部函数可以访问外部函数的成员,但外部函数不能调用内部函数
  • 如果使两个相同函数名
function xitu(){
        var x=1;
        function xitu2(){
        var x='A';
        console.log('inner'+x);
      }
      console.log('outer'+x);
      xitu2()
    }
    xitu()

网络异常,图片无法展示
|

  • 假设JavaScript中函数查找变量从自身函数开始~,由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

提升变量的作用域

function xitu(){
    var x="x"+y;
    console.log(x);
    var y='y';
}

结果:x undefined 说明:js执行引擎,自动提高了y的作用域但是不会被赋值

function xitu2(){
    var y;
    var x="x"+y;
    console.log(x);
     y='y';
}
  • 这个是在JavaScript建立之初就存在的特性,养成习惯,所有的变量声明都放在最前面,便于代码维护。var x,a,b...;

全局函数

x=1;
function f(){
  console.log(x)
}
f()
console.log(x)

网络异常,图片无法展示
|
全局对象 window

var x='xxx';
alert(x);
alert(window.x);
  • 默认所有的全局变量,都会自动绑定在window对象里
  • alert()这个函数本身也是一个window变量
  • JavaScript实际上只有一个全局作用域,如何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错refrenceError

规范

  • 由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变量,冲突->如果减少冲突?

定义唯一的全局变量

var xitu={};
xitu.name="xitujuejing"
xitu.add=function(a,b){
return a+b;}
  • 把自己的代码全部放在自己定义的唯一空间名字中,降低全局变量冲突的问题
  • jQuery.==${}

局部作用域let

function aaa(){
for(var i =0;i<100;i++){
console.log(i)
}
    console.log(i+1); //这个i还是可以使用
    }    
  • let关键字,解决局部作用域冲突问题
  • 建议大家使用let来定于局部变量

常量const

const PI='3.14';
console.log(PI);
PI='123' 
  • 会报错PI已经被常量定义无法被修改
相关文章
|
1月前
|
JavaScript 前端开发
js的作用域作用域链
【10月更文挑战第29天】理解JavaScript的作用域和作用域链对于正确理解变量的访问和生命周期、避免变量命名冲突以及编写高质量的JavaScript代码都具有重要意义。在实际开发中,需要合理地利用作用域和作用域链来组织代码结构,提高代码的可读性和可维护性。
|
3月前
|
JavaScript 前端开发
JavaScript如何判断变量undefined
JavaScript如何判断变量undefined
|
3月前
|
JavaScript 前端开发
JavaScript基础知识-变量的声明提前
关于JavaScript变量声明提前特性的基础知识介绍。
51 0
JavaScript基础知识-变量的声明提前
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]作用域的“生产者”——词法作用域
本文介绍了JavaScript中的作用域模型与作用域,包括词法作用域和动态作用域的区别,以及全局作用域、函数作用域和块级作用域的特点。通过具体示例详细解析了变量提升、块级作用域中的暂时性死区等问题,并探讨了如何在循环中使用`var`和`let`的不同效果。最后,介绍了两种可以“欺骗”词法作用域的方法:`eval(str)`和`with(obj)`。文章结合了多位博主的总结,帮助读者更快速、便捷地掌握这些知识点。
37 2
[JS]作用域的“生产者”——词法作用域
|
1月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
1月前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
1月前
|
JavaScript 前端开发
如何在 JavaScript 中实现块级作用域?
【10月更文挑战第29天】通过使用 `let`、`const` 关键字、立即执行函数表达式以及模块模式等方法,可以在JavaScript中有效地实现块级作用域,更好地控制变量的生命周期和访问权限,提高代码的可维护性和可读性。
|
1月前
|
JavaScript 前端开发
javascript的作用域
【10月更文挑战第19天javascript的作用域
|
1月前
|
前端开发 JavaScript UED
如何使用 JavaScript 动态修改 CSS 变量的值?
【10月更文挑战第28天】使用JavaScript动态修改CSS变量的值可以为页面带来更丰富的交互效果和动态样式变化,根据不同的应用场景和需求,可以选择合适的方法来实现CSS变量的动态修改,从而提高页面的灵活性和用户体验。
|
2月前
|
JavaScript 前端开发
JavaScript 作用域
JavaScript 作用域是指程序中可访问的变量、对象和函数的集合。它分为函数作用域和局部作用域。函数作用域内的变量仅在函数内部可见,而全局作用域的变量在整个网页中均可访问。局部变量在函数执行完毕后会被销毁,而全局变量则在整个脚本生命周期中都存在。未使用 `var` 关键字声明的变量默认为全局变量。