批改状态:合格
老师批语:js其实还是很有意思的, 不是吗
JS语言核心有三部分
ECMAScrpt: 语法核心
DOM: Document Object Model, 文档对象模型(文档指HTML文档或XML文档)
BOM: Browser Object Mode, 客户端/浏览器窗口对象,又叫浏览器对象模型(操作对象: 浏览器窗口对象模型).
除此之外还有一些补充
宿主环境: 执行环境/运行上下文
<script>标签. 其中type属性指定脚本语言, 目前text/JavaScript已成为唯一, 所以不写也可以.
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML文档中嵌入js代码</title><!-- type属性指定脚本语言, 目前text/JavaScript已成唯一, 所以不写type属性也可以 --><script type="text/javascript">// window变量指向当前浏览器窗口, 类似PHP中的echo.window.document.write("<h1>Hello JavaScript!</h1>");</script></head><body></body></html>

demo1.js
window.document.write("<h1>Hello JavaScript~~~~~~~~~~</h1>");
引用demo1.js
<!-- script标签的src标签可以指定外部的一个js脚本文件, 此时script标签内部的代码将被忽略 --><script src="demo1.js">// 下面的代码将不会执行window.document.write("hahahaha");</script>
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML文档中嵌入js代码</title><!-- 在执行js脚本时, 将会中断HTML文档解析, 当js脚本执行完毕时,才会继续往下解析, 特别是很长的js脚本, 会造成HTML页面假死. 所以, 一般把写在HTML文档中的js代码放在靠近</body>的地方 --><script>alert("我将中断HTML文档往下解析");</script></head><body><!-- 在关闭alert()弹出框之前,下面的HTML元素不显示 --><h1>你好! JavaScript</h1></body></html>


src文件引入, 这样可以实现延时加载, 文档也不会阻塞外部js脚本文件
alert('看看我会不会把HTML文档解析中断');
延时加载测试脚本
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML文档中嵌入js代码</title><script src="alert.js" defer></script></head><body><h1>你好! JavaScript</h1></body></html>

外部js文件略
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML文档中嵌入js代码</title><script src="alert.js" async></script></head><body><h1>你好! JavaScript</h1></body></html>

var 姓名="张三";console.log(姓名);/* result: 张三 */
var username = "李四";var UserName = "王五";console.log(username);console.log(UserName);/* result:李四王五*/
function func() {console.log("func");}function FUNC() {console.log("FUNC");}func();FUNC();/* result:funcFUNC */
var name = "James";console.log(name);name = "Kobe";console.log(name);/* result:JamesKobe */
var name = "James";console.log(name);var name = "Kobe";console.log(name);/* result:JamesKobe */
JS中, 作用域是一个对象, 用来查找变量的工具.
JS与PHP的作用域是一样的, 也分全局和函数作用域
PHP和js(ES5)均不支持块作用域(java中的代码块), ES6支持
函数可以访问全局作用域的成员, 而全局作用域却无法访问函数作用域的成员
var varInGlobal = 'glb';function func1() {var varInFunc = 'hello';// 函数作用域中可以直接访问外部作用域的变量console.log(varInGlobal);}func1();// 无法访问函数中的变量console.log(varInFunc);/* result:glbUncaught ReferenceError: varInFunc is not definedat <anonymous>:11:21*/// 块作用域if(true) {var var1 = 'hello1';let var2 = 'hello2';}// var1可以正常访问, 不受块作用域影响console.log(var1);// let声明的变量就受影响了(ES6)console.log(var2);/* result:hello1Uncaught ReferenceError: var2 is not definedat <anonymous>:10:21*/
在JS中, 变量未定义之前, 就可以访问了. 值为undefined
JS中的变量声明和初始化时分开的. var sayHi = "hello";可以分解为var sayHi;和sayHi="hello". 当变量只被声明而未被初始化时, 其值为undefined.
console.log(seyHello);var sayHello;/* result: undefined */
js让前端变得灵活. 没有js, 网页是死的, 渲染完成就不会改变, 除非跳转到新的页面. 有了js, 就有了很多交互. 前端就活了. HTML标签指定了页面的元素, CSS定义了元素的样子, JS则定义了元素的行为.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号