Skip to content
本页目录

javascript

javascript是一种脚本,一门编程语言

  • 可以在网页上实现复杂的功能
  • 网页展现给你的不再是简单的静态信息,而是实时的内容更新,交互的地图,2d/3d动画,滚动播放的视频等等

应用程序接口

application programming interfaces 简称api,api将为你的代码提供额外的超能力

api是已经建立好的一套代码组件,可以让开发者实现原本很难甚至无法实现的程序

api通常分为两类 浏览器api和第三方api

浏览器api 内建于web浏览器中 可以将数据从周边计算机环境中筛选出来,还可以做实用的复杂工作

  • 文档对象模型 api 能通过创建、移除、修改html

  • 地理位置api 获取地理信息 谷歌地图可以找到你的位置,而且标示在地图上

  • 画布canvas和webGL api 可以创建生动的2d和3d图像

  • htmlMediaElment和webRTC等影音类api 可以利用媒体

第三方api并没默认嵌入浏览器中 可以从网上取得他们的代码和信息

js在页面上做了什么?

浏览器在读取一个网页时,代码将在一个运行环境中得到执行

在html和css集合组装成一个网页后,浏览器的js引擎将执行js代码 保证了当js开始运行之前 网页的结构和样式已经就位

js最普遍的用处是通过DOM api 动态修改html和css来更新用户界面 user interface

浏览器安全

  • 每个浏览器标签页就是其自身用来运行代码的独立容器,称为运行环境
  • 每个标签页中的代码完全独立运行,而且一个标签页中的代码不能直接影响另一个标签页中的代码

解释和编译

解释型语言:

  • 代码自上而下运行 且实时返回运行结果
  • 代码在由浏览器执行前 不需要将其转化为其他形式
  • 直接以文本格式text form 被接受和处理

编译型语言:

  • 需要先将代码转化成另一种形式才能运行
  • 比如c/c++先被编译成汇编语言,然后才能由计算机运行
  • 将以二进制的格式运行,二进制内容是由程序员源代码产生的

js是轻量级解释型语言,js转换器运用了一种叫做即时编译just- in-time compiling的技术,当js源代码被执行时,它会被编译成二进制的格式,是代码运行速度更快,尽管如此,仍然是一门解释型语言,因为编译过程发生在代码运行中。

服务端代码vs客户端代码

  • 服务端代码: 在服务器上运行,接着运行结果才由浏览器下载并展示出来
  • 客户端代码: 在用户的电脑上运行的代码,在浏览一个网页时,它的客户端代码就会被下载,然后由浏览器来运行并展示

动态代码vs静态代码

  • 动态:通过按需生成新内容来更新web页面/应用,是的不同环境下显示不同内容
  • 静态:没有动态更新内容的网页,所显示的内容不会改变

内部js

html
<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <meta charset="utf-8" />
    <title>使用 JavaScript 的示例</title>
    <script>
      // 在此编写js代码
      document.addEventListener("DOMContentLoaded", function () {
        function createdParagraph() {
          let para = document.createElement("p");
          para.textContent = "你点击了按钮";
          document.body.appendChild(para);
        }

        const buttons = document.querySelectorAll("button");
        for (let i = 0; i < buttons.length; i++) {
          buttons[i].addEventListener("click", createdParagraph);
        }
      });
    </script>
  </head>
  <body>
    <button>点我呀</button>
  </body>
</html>

document.addEventListener('DOMContentLoaded',function(){...}) 这是一个事件监听器,监听浏览器的'DOMContentLoaded'事件,即html文档体加载、解释完毕事件,事件触发时将调用"..."处代码

外部js

html
<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <meta charset="utf-8" />
    <title>使用 JavaScript 的示例</title>
    <script async src="./script.js"></script>
  </head>
  <body>
    <button>点我呀</button>
  </body>
</html>

async异步属性,告知浏览器在遇到script元素时不要中断后续html内容加载

在同级目录中新建script.js,内容同上

内联js处理器

html
<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <meta charset="utf-8" />
    <title>使用 JavaScript 的示例</title>
    <script>
      function createP() {
        const para= document.createElement("p")
        para.textContent = "你点击了这个按钮"
        document.body.appendChild(para);
      }
    </script>
  </head>
  <body>
    <button onclick="createP()">点我呀</button>
  </body>
</html>

这种写法会使js污染到html,而且效率低下,对于每个需要应用到js的按钮,都得手动添加onclick="createP()"属性

async和defer

浏览器遇到async脚本时不会阻塞页面渲染,而是直接下载然后运行,这样脚本的运行次序就无法控制,只是脚本不会阻止剩余页面的显示 当页面脚本彼此独立,且不依赖本页面的其他任何脚本时,async时最理想的选择

如果页面想要加载三个脚本,如果不加defer三者的调用顺序是不确定的,但是后面两个有需要依赖jquery 此时就可以使用defer

html
<script defer src="js/vendor/jauery.js"></script>
<script defer src="js/script1.js"></script>
<script defer src="js/script2.js"></script>

脚本调用策略小结:

  • 如果脚本无需等待页面解析,且无依赖独立运行,应使用async
  • 如果脚本需要等待页面解析,且依赖于其他脚本,调用这些脚本时应使用defer,将关联的脚本按所需顺序置于html中

注释

  • Ctrl+/ 单行注释
javascript
  // 我是注释
  • Shift+Alt+A 多行注释
javascript
/*  
  我是
  注释
*/