JavaScript-scope作用域

作用域

作用域指一个变量的作用的范围

1. 全局作用域

var a = 10;
var b = 20;
var c = "hello";

console.log(window.c);

function fun() {
  console.log("我是fun函数");
}

window.fun();

//window.alert("hello");

请添加图片描述

说明

  1. 直接编写在 script 标签中的 JS 代码,都在全局作用域
  2. 全局作用域在页面打开时创建,在页面关闭时销毁
  3. 在全局作用域中有一个全局对象 window
    • 它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用
  4. 在全局作用域中:
    • 创建的对象都会作为 window 对象的属性保存
    • 创建的函数都会作为 window 对象的方法保存
  5. 全局作用域中的变量都是全局变量
    • 在页面的任意的部分都可以访问的到

2. 函数作用域

//创建一个变量
var a = 10;

function fun() {
  var a = "我是fun函数中的变量a";
  var b = 20;

  //console.log("a = "+a);

  function fun2() {
    console.log("a = " + window.a);
  }

  fun2();
}

//fun();
//console.log("b = "+b);

/*
 * 在函数作用域也有声明提前的特性,
 * 	使用var关键字声明的变量,会在函数中所有的代码执行之前被声明
 * 	函数声明也会在函数中所有的代码执行之前执行
 */
function fun3() {
  fun4();

  //console.log(a);

  var a = 35;

  function fun4() {
    alert("I'm fun4");
  }
}

//fun3();

var c = 33;

/*
 * 在函数中,不使用var声明的变量都会成为全局变量
 */
function fun5() {
  //console.log("c = "+c);
  //c = 10;

  //d没有使用var关键字,则会设置为全局变量
  d = 100;
}

fun5();

//console.log("d = "+d);

var e = 23;

/*
 * 定义形参就相当于在函数作用域中声明了变量
 */
function fun6(e) {
  alert(e);
}

fun6();

请添加图片描述

说明

  1. 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
  2. 每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的
  3. 在函数作用域中可以访问到全局作用域的变量
    • 在全局作用域中无法访问到函数作用域的变量
  4. 当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用
    • 如果没有则向上一级作用域中寻找,直到找到全局作用域,
    • 如果全局作用域中依然没有找到,则会报错 ReferenceError
  5. 在函数中要访问全局变量可以使用 window 对象

补充

  1. 在函数作用域也有声明提前的特性
    • 使用 var 关键字声明的变量,会在函数中所有的代码执行之前被声明
    • 函数声明也会在函数中所有的代码执行之前执行
function fun3() {
  fun4();
  //console.log(a);
  var a = 35;
  function fun4() {
    alert("I'm fun4");
  }
}
  1. 在函数中,不使用 var 声明的变量都会成为全局变量
function fun5() {
  //d没有使用var关键字,则会设置为全局变量
  d = 100;
}
  1. 定义形参就相当于在函数作用域中声明了变量
function fun6(e) {
  alert(e);
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王十四兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值