web前端学习(三十四)——JavaScript对象、函数及作用域(全局变量、局部变量)的相关设置

简介: web前端学习(三十四)——JavaScript对象、函数及作用域(全局变量、局部变量)的相关设置

1.JS对象


JavaScript对象是拥有属性和方法的数据。在JavaScript中,几乎所有的事物都是对象。(这和Java一样啊,万物皆对象!!!)

可以使用字符来定义和创建 JavaScript 对象,定义 JavaScript 对象可以跨越多行,空格跟换行不是必须的。

可以说 "JavaScript 对象是变量的容器"。但是,我们通常认为"JavaScript 对象是键值对的容器"

键值对通常写法为name : value (键与值以冒号分割)。键值对在 JavaScript 对象通常称为 对象属性

这里的键值对的写法类似于:C语言中的哈希表、Java中的哈希映射、Python中的字典。


1.1 访问对象属性

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>JS简单学习</title>
  </head>
  <body>
    <p>创建 JavaScript 对象</p>
    <p id="demo"></p>
    <script>
      var person={
        hisName: "zhangsan",
        hisSex: "男",
        hisAge: 25,
        hisHobby: "sleep"
      };
      document.getElementById("demo").innerHTML=
        "姓名:" + person.hisName + ",性别:" + person.hisSex + ",年龄:" + person.hisAge + ",爱好:" + person.hisHobby + "。";
      //也可以写为 person["hisName"],后面的属性类似
    </script>
  </body>
</html>

1.2 访问对象方法


对象的方法定义了一个函数,并作为对象的属性存储。对象方法通过添加 () 调用 (作为一个函数)

调用方法时,如果是对象.方法(),此时正常返回方法执行的结果;如果是对象.方法,此时返回方法的定义。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>创建和使用对象方法。</p>
    <p>对象方法作为一个函数定义存储在对象属性中。</p>
    <p id="demo1"></p>
    <p id="demo2"></p>
    <script>
      var person={
        hisName: "zhangsan",
        hisSex: "男",
        hisAge: 25,
        hisHobby: "sleep",
        fullInformation: function() {
          return this.hisName + "," + this.hisSex;
        }
      };
      document.getElementById("demo1").innerHTML="不加括号输出函数表达式:" + person.fullInformation;
      document.getElementById("demo2").innerHTML="加括号输出函数执行结果:" + person.fullInformation();
    </script>
  </body>
</html>

2.JS函数


函数就是包裹在花括号中的代码块,前面使用了关键词 function

当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。


2.1调用带参数的函数 

在调用函数时,可以向其传递值,这些值被称为参数,这些参数可以在函数中使用,也可以发送任意多的参数,由逗号 (,) 分隔。 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>点击下面这个按钮,来调用带参数的函数。</p>
    <button type="button" onclick="myFunction('我爱编程','Hello World!!!')">按钮</button>
    <script>
      function myFunction(first,second) {
        alert("主信息:" + first + ",附加信息:" + second);
      }
    </script>
  </body>
</html>

2.2 带有返回值的函数


有时,我们会希望函数将值返回调用它的地方。通过使用 return 语句就可以实现。

在使用 return 语句时,函数会停止执行,并返回指定的值。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>本例调用的函数会执行一个计算,然后返回结果:</p>
    <p id="demo"></p>
    <script>
      function myFunction(a,b) {
        return a*b;
      }
      document.getElementById("demo").innerHTML=myFunction(5,6);
    </script>
  </body>
</html>

当仅仅希望退出函数时,也可使用 return 语句。返回值是可选的。

如果 a 大于 b,则下面的代码将退出函数,并不会计算 a b 的总和。

function myFunction(a,b) {
    if (a>b) {
        return;
    }
    x=a+b;
}

3.JS作用域


作用域是可访问变量的集合。

JavaScript , 对象和函数同样也是变量,作用域为可访问变量,对象,函数的集合,函数作用域:作用域在函数内修改。


3.1 JS局部变量 

JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。

可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。局部变量会在函数运行以后被删除。因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>局部变量在声明的函数外不可以访问。</p>
    <p id="demo"></p>
    <script>  
      function myFunction() {
        var color="red";
      }
      document.getElementById("demo").innerHTML="局部变量color的类型是:" + typeof color;
    </script>
  </body>
</html>

3.2 JS全局变量


在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。全局变量会在页面关闭后被删除。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>全局变量在任何脚本和函数内均可访问。</p>
    <p id="demo"></p>
    <script>
      var color="red";
      function myFunction() {
        document.getElementById("demo").innerHTML=
          "函数体内部可以访问到全局变量color:" + color;
      }
      myFunction();
    </script>
  </body>
</html>

3.3 未声明的JS变量将自动转为全局变量

如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。 

如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>如果你的变量没有声明,它将自动成为全局变量:</p>
    <p id="demo"></p>
    <script>
      function myFunction() {
        color="red";
      }
      myFunction();
      document.getElementById("demo").innerHTML="可以访问到全局变量color:" + color;
    </script>
  </body>
</html>

3.4 HTML中的全局变量


HTML , 全局变量是 window 对象: 所有数据变量都属于 window 对象。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JS简单学习</title>
  </head>
  <body>
    <p>在HTML中, 所有全局变量都会成为window变量。</p>
    <p id="demo"></p>
    <script>
      function myFunction() {
        color="red";
      }
      myFunction();
      document.getElementById("demo").innerHTML="可以访问到全局变量color:" + window.color;
    </script>
  </body>
</html>

 

相关文章
|
2月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
2月前
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
2月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
30 1
JavaScript中对象的数据拷贝
|
2月前
|
自然语言处理 JavaScript 前端开发
[JS]作用域的“生产者”——词法作用域
本文介绍了JavaScript中的作用域模型与作用域,包括词法作用域和动态作用域的区别,以及全局作用域、函数作用域和块级作用域的特点。通过具体示例详细解析了变量提升、块级作用域中的暂时性死区等问题,并探讨了如何在循环中使用`var`和`let`的不同效果。最后,介绍了两种可以“欺骗”词法作用域的方法:`eval(str)`和`with(obj)`。文章结合了多位博主的总结,帮助读者更快速、便捷地掌握这些知识点。
38 2
[JS]作用域的“生产者”——词法作用域
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
52 6
|
2月前
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
202 3
|
1月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
221 45
|
2月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
40 7