js声明变量的关键字(var,const,let)以及js的作用域(全局作用域,函数作用域,以及由let引进的块级作用域)

js中var用于声明普通的变量,在全局环境中声明的为全局变量;在函数内声明的为函数作用域变量
const与var很相似,一点不同:const声明的变量不可以重复声明,更加不可以重复赋值
let为js引进了块级作用域的概念,由let声明的变量作用域仅限于该变量就近的花括号内(当然包括所嵌套的语句块)

全局作用域:定义的全局变量在整个程序中都是有定义的
函数作用域:定义的变量只在声明的函数体以及其所嵌套的函数内有定义
块级作用域:由let关键字已经,指let声明的变量只有语句块的作用范围

function x() {
    glo = 4;
    var par = 5;
    console.log(glo);
    // 全局的glo
    console.log(par);
    // 局部作用域的par
}

x();

console.log(glo);
// 会打印出4
// console.log(par);
// 报错:par是undefined
// ReferenceError: par is not defined

function y() {
    glo = 7;
    console.log(glo);
    // 在这里可以修改glo(因为是全局作用域)
}
y();

glo = 9;
// 在这里也可以修改glo(因为是全局变量)
console.log(glo);

/*上面的例子想说明的是:
通过var关键字声明的变量,在全局环境下声明就是一个全局变量
如果是在函数内声明的就是一个局部作用的变量

注意:全局变量在程序中始终都是有定义的,局部变量在声明他的函数体
内以及所嵌套的函数内是有定义的

当然,还有一种情况,就是如果直接使用一个变量(不用var声明)
那么,无论是在全局环境还是在函数内都是一个全局变量

注意:js只用全局作域和函数作用域两种*/

// 关于函数作用域的特性:被声明在函数作用域的变量在整个函数内都是
// 被声明过的。
// 也就是说,js函数内声明的所有变量(不涉及赋值)都被“提前”到函数体的顶部
function z() {
    console.log(special);
    // 在这里输出special显示special是已经声明过的
    // 输出undefined,而不会报错
    var special = 99;
}
z();


// 接下来有两个声明变量的关键字:const和let

// const和var相似,但是const声明的是一个常量,也就是说
// 经过const声明的变量是不可以重复声明或者是赋值的

// let关键字为js添加了一个变量的块级作用域
// 由let声明并定义的变量只属于就近的花括号括起来的语句块(
// 当然,还包括他所嵌套的语句块)
// let声明变量一般都是用在循环语句中
function oddsums(n) {
    for (let ku = 1; ku < n; ku++) {
    console.log(ku);
    }
    // console.log(ku);
    // 这条语句会报错,表示ku是一个没有被声明的变量
}

oddsums(5);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值