JavaScript作用域详解;严格模式概念

首先我们要了解什么是作用域?

作用域值得是我们有权访问的变量集合。

-1.JavaScript 函数作用域

  • JavaScript中有两种作用域类型:
    - 局部作用域
    - 全局作用域

所谓函数作用于就是:每个函数创建一个新的作用域
作用域决定了这些变量的可访问性
函数内部定义的变量在函数外部是不可访问的。

-1.1局部JavaScript 变量

在JavaScript 函数中声明的变量,会成为函数的局部变量
局部变量的作用域是局部的:只能在函数内部访问它们。
例如: 例子中 a 只能在函数内部被访问,函数外部无法访问变量 a

	submit();
    function submit() {
        let a = 11;
        console.log(a);
    }
    console.log(a);  
   //测试为报错。因为在函数外面的console.log中变量 a 未定义。 
   //但是执行了submit()函数以后控制台输出11.

由于只能在函数内部识别局部变量,因此能够在不同函数中使用同变量名。
在函数开始时会创建局部变量,在函数完成时会删除他们。

-1.2全局JavaScript变量

函数之外声明的变量,会成为全局变量
全局变量的作用域是全局的:网页所有的脚本和函数都能够访问它
例子:例子中a可以在函数内外进行访问,在定义其它的函数也可以访问a。

	submit();
	let a = 11;
    function submit() {
        console.log(a);
    }
    console.log(a);  //输出11 执行submit()函数是再次输出11。

-2.JavaScript变量

在JavaScript 中,对象和函数也是变量
作用域决定了从代码不同部分对变量、对象和函数的可访问性。

-2.1自动全局

如果为尚未声明的变量赋值,此变量会自定成为全局变量
例如:执行结果为 tom tom 。

    myname();
    function myname() {
        name = "tom";
        console.log(name);
    }
    console.log(name);

-2.2严格模式 "use strict"

它不算是一条语句,而是一段文字表达,
作用是指示JavaScript代码应该以“严格模式”执行,在严格模式中,无法使用未声明的变量
“use strict”指令只能在脚本或函数的开头被识别。

如何声明严格模式?

  • 通过在脚本或者函数的开头添加 “use strict”; 来声明严格模式
  • 在脚本开头进行声明,拥有全局作用域,也就是说脚本中所有代码均以严格模式来执行。
    例如:
"use strict";
myFunction();

function myFunction() {
     y = 3.14;   // 这会引发错误,因为 y 尚未声明
}
  • 在函数中声明严格模式,则只有函数中的代码以严格模式执行

-2.2.1 为什么要使用严格模式

  • 严格模式使得我们更容易编写安全的JavaScript代码
  • 严格模式把之前可接受但是不好的语法转为真正的错误
    例如:在普通的JavaScript 中,打错了变量名会创建新的全局变量,但是使用严格模式以后,打错变量名就会抛出错误

-2.2.2严格模式中不允许的事项

  • 在不声明变量的情况下使用变量是不允许的:
  • 在不声明对象的情况下使用对象是不允许的
  • 删除变量或对象
  • 删除函数
  • 重复参数名
  • 八进制数值文本
  • 转义字符
  • 写入只读属性
  • 写入只能获取的属性
  • 删除不可删除的属性
  • 字符串 “eval”,“arguments” 不可用作变量
  • with 语句
  • 不允许eval()在其被调用的作用域中创建变量

严格模式中不允许使用为未来预留的关键词。它们是:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

-3HTML中的全局变量

在HTML中,全局作用域是window。所有全局变量均属于window对象。
实例:在 HTML 中,通过 var 定义的全局变量,会成为 window 变量。

var myname  = "tom";
// 此处的代码能够使用window.myname
document.getElementById("demo").innerHTML = window.myname

-4JavaScript变量的有限期

JavaScript 变量的有效期始于其被创建时。
局部变量会在函数完成时被删除。
全局变量会在您关闭页面时被删除。

-5函数参数

函数参数也是函数内的局部变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值