首页 > 编程语言 >JavaScript第二章,局部变量和全局变量,作用域,闭包1.1

JavaScript第二章,局部变量和全局变量,作用域,闭包1.1

时间:2024-11-28 14:02:52浏览次数:13  
标签:闭包 function 局部变量 函数 作用域 JavaScript am 全局变量

1. 局部变量和全局变量

全局变量:在函数外部声明的变量或在任何地方未使用varletconst关键字声明的变量(这会导致隐式全局变量)都是全局变量。全局变量在整个脚本中都是可访问的。

局部变量:在函数内部使用varletconst关键字声明的变量是局部变量。它们只能在声明它们的函数或代码块内部访问。

// 全局变量
var globalVar = "I am global";

function exampleFunction() {
    // 局部变量
    var localVar = "I am local";
    console.log(localVar); // 输出: I am local
    // console.log(globalVar); // 输出: I am global,全局变量在函数内也可访问
}

exampleFunction();
// console.log(localVar); // 会报错,localVar 是局部变量,在函数外不可访问

2. 隐式全局变量

如果在严格模式('use strict';)下未使用varletconst声明变量,则会抛出错误。但在非严格模式下,未声明的变量会成为全局对象的属性,即隐式全局变量。

// 隐式全局变量(不推荐)
someVar = "I am implicitly global";
console.log(window.someVar); // 在浏览器中输出: I am implicitly global

3. 作用域和作用域链

作用域:变量可访问的范围。

作用域链:在嵌套函数中,内部函数可以访问外部函数的变量。这种访问是通过作用域链实现的,作用域链是从当前作用域开始,向上逐层查找变量,直到全局作用域。

function outerFunction() {
    var outerVar = "I am from outer function";

    function innerFunction() {
        console.log(outerVar); // 输出: I am from outer function,通过作用域链访问外部变量
    }

    innerFunction();
}

outerFunction();

4. 闭包

闭包是指一个函数能够记住并访问它的词法作用域(即定义时的作用域),即使这个函数在其词法作用域之外执行。

function createCounter() {
    let count = 0; // 私有变量
    return function() {
        count++;
        return count;
    };
}

const counter = createCounter();
console.log(counter()); // 输出: 1
console.log(counter()); // 输出: 2

5. 事件

事件是JavaScript中用于处理用户交互(如点击、键盘输入等)的机制。事件处理器是绑定到元素上的函数,当事件发生时,这些函数会被调用。

// 假设有一个按钮元素 <button id="myButton">Click me</button>
document.getElementById("myButton").addEventListener("click", function() {
    alert("Button was clicked!");
});

练习题

  1. 声明一个全局变量和一个局部变量,并在函数内部和外部分别打印它们的值。
  2. 创建一个函数,该函数内部有一个局部变量和一个闭包,通过闭包访问并修改局部变量的值。
  3. 解释什么是作用域链,并给出一个使用作用域链访问外部函数变量的例子。
  4. 编写一个事件处理器,当用户在输入框中输入文本时,显示一个警告框,显示输入的文本。
  5. 解释什么是隐式全局变量,并说明为什么应该避免使用它们。

标签:闭包,function,局部变量,函数,作用域,JavaScript,am,全局变量
From: https://blog.csdn.net/it_s_raining/article/details/144109630

相关文章

  • javascript-对象object
    1.对象是引用操作而不是值操作objecta;objectb;a=b;如果b中有属性x;更改b.x会同时更改a.x,两者指向同一片内存空间。2.对象的定义会每次为对象分配内存空间。使用For循环创建的对象每个都是独立内存空间,是不同的对象。3.对象的创建Object.create();leto2=Object.create(nu......
  • JavaScript中的$
    在JavaScript中,以$开头的变量名称通常与jQuery库的使用有关。jQuery是一个快速、小巧且功能丰富的JavaScript库,它使得HTML文档遍历和操作、事件处理、动画和Ajax等操作变得更加简单。在jQuery中,$符号被用作jQuery函数的别名,用于选择HTML元素、创建新的DOM元素以及执行各种操作。......
  • JavaScript中的document
    在JavaScript中,document是一个核心对象,代表了浏览器中的当前HTML文档。document是Document接口的一个实例,提供了访问和操作文档内容的方法和属性。document对象是全局Window对象的一部分,因此在网页的任何地方都可以访问到它,无需任何额外的引用。document对象是JavaScri......
  • 前端技术对JavaScript中DOM的学习
    DOM目录DOMDOM树结构获取DOM对象更新DOM对象插入DOM对象删除DOM对象DOM树结构根节点(RootNode):在HTML文档中,<html>元素是整个DOM树的根节点。它包含了文档的所有其他部分。元素节点(ElementNode):这些节点对应了HTML或XML文档中的标签,如<body>、<p>等。元素节点可以有子节点,包......
  • JavaScript 设置 Cookie 中的 HttpOnly 标志为什么无法生效?
    javascript设置cookie中的httponly为什么以下代码无法设置Cookie的HttpOnly标志?document.cookie='url=https://www.test.com/;expires=0;path=/;HttpOnly;';答案在客户端端(JavaScript)无法设置HttpOnly标志。HttpOnly标志必须在服务端添加。这一标志旨在防止客......
  • 深入探讨 JavaScript 的事件循环
    深入探讨JavaScript的事件循环......
  • Python_闭包和装饰器
    Python命名空间NamespacesandScope:multiplenamespaces对象和名称的归属--Searchclosureenclosing Local_Global_built-in内置名字空间,任何模块均可访问它,它存放着内置的函数和异常。全局名字空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级......
  • JavaScript第一章,基础,对话框,函数1.2
    1.系统对话框系统对话框是浏览器提供的一组用于与用户交互的对话框,包括:alert():显示一个带有消息的警告框。confirm():显示一个带有确认和取消按钮的对话框,返回布尔值 true 或 false。prompt():显示一个可提示用户输入的对话框,返回用户输入的字符串(如果用户取消则返回 null......
  • 第十章 JavaScript的应用
    10.1JavaScript概述10.1.1JavaScript简介JavaScript是一种基于对象(0bject)和事件驱动(EventDriven)并具有安全性能的脚本语言,能够与HTML(超文本标记语言)、Java语言一起在Web页面中与Web客户交互它无须经过先将数据传给服务器端(Server)、再传回来的过程,而直接可以由客户......
  • JavaScript基础语法
    一.数据类型1.基本类型数字整数小数字符串'' ""都可以布尔类型vard=true;只需要用var声明不需要在前面声明数据类型打印出来undefined说明声明一个变量但没有赋值null涉及到一个量但是这个量是空说明没有声明2.复合类型数组数组通过下标访问arr.length获......