01JAVASCRIPT基础


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>01JAVASCRIPT基础</title>

</head>
<body>

<!--说明
1 为了避免加载延迟,js放到body标签的最下面。
-->

<!--1 引用方式 -->
<!--1.1 引用外部文件-->
<!--<script srr="1.js"> </script>-->

<!--1.2 使用内部-->
<!--<script>-->
<!--    console.log("hello")-->
<!--</script>-->

<!--2 注释-->
<!--单行注释 //-->
<!--多行注释 /**/-->

<!--3 代码的执行-->
<!--从上往下按行执行,默认自动加分号(;),但有时会有问题,建议手动加分号(;)-->

<!--4 变量声明并赋值-->
<!--弱类型语言,不必指定变量的类型,变量的类型根据变量的值而变化。-->
<!--<script>-->
<!--    var web = "hello";-->
<!--    console.log(typeof web); //string-->
<!--    web = 99;-->
<!--    console.log(typeof web); //number-->
<!--    web = {};-->
<!--    console.log(typeof web); //object-->
<!--</script>-->

<!--5 变量提升 var声明变量-->
<!-- js中的关键字是不可以使用的,比如 if while class-->
<!--解析器会先解析代码,然后把声明的变量的声明提升到最前,这就叫做变量提升。-->

<!--<script>-->
<!--    console.log(web); //undefined-->
<!--    var web = "hello";-->
<!--</script>-->

<!--以上代码等价与-->

<!--<script>-->
<!--// 声明变量-->
<!--    var web;-->
<!--    console.log(web); //undefined-->
<!--// 赋值变量-->
<!--    web = "hello";-->
<!--</script>-->

<!--
总结:
使用 var 定义的代码,声明会被提升到前面,赋值还在原位置。
var声明变量时推荐先提前声明后再使用。
-->

<!--6 let&const暂时性死区TDC-->
<!--
(1) TDZ 又称暂时性死区,指变量在作用域内已经存在,但必须在let/const声明后才可以使用。
(2) TDZ 可以让程序保持先声明后使用的习惯,让程序更稳定。
1) 变量要先声明后使用
2) 建议使用 let/const 而少使用 var
(3) 使用let/const 声明的变量在声明前存在临时性死区(TDZ)使用会发生错误
-->
<!--<script>-->
<!--    let web = "hello";-->
<!--    const name = "lc";-->
<!--    console.log(web, name) //hello lc-->
<!--</script>-->

<!--7 var-let-const的共同点-->
<!--
(1) var/let/const共同点是全局作用域中定义的变量,可以在函数中使用
(2) 函数中声明的变量,只能在函数及其子函数中使用
(3) 函数中声明的变量就像声明了私有领地,外部无法访问
-->

<!--8 var/let/const声明变量的区别-->
<!--8.1 var-->
<!--使用 var 声明的变量存在于最近的函数或全局作用域中,没有块级作用域的机制。-->
<!--没有块作用域很容易污染全局-->

<!--8.2 let-->
<!--与 var 声明的区别是 let/const 拥有块作用域-->

<!--8.3 const-->
<!--与 var 声明的区别是 let/const 拥有块作用域-->
<!--使用 const 用来声明常量,这与其他语言差别不大,比如可以用来声明后台接口的 URI 地址。-->
<!--
常量名建议全部大写
只能声明一次变量
声明时必须同时赋值
不允许再次全新赋值
可以修改引用类型变量的值
拥有块、函数、全局作用域
-->

<!--9 window全局对象污染与重复声明-->
<!--
(1) let/const 全局声明的变量不存在于window对象中。
    var 全局声明的变量存在于window对象中。
(2) let/const 声明后的变量不允许在同一作用域中重新声明,不同作用域可以重新声明。
    var 在同一作用域中可以重复声明。
-->

<!--<script >-->
<!--let screenLeft = 88;-->
<!--console.log(window.screenLeft); //605-->
<!--console.log(screenLeft); //88-->
<!--</script>-->

<!--<script>-->
<!--    var web = "123"-->
<!--    var web = "123456"-->
<!--    console.log(web) //123456-->
<!--</script>-->

<!--10 Object.freeze冻结变量-->
<!--<script>-->
<!--    // 使用严格模式,让用户感知错误,提示已经锁定常量的引用类型且无法进行修改-->
<!--    "use strict";-->
<!--    const HOST = {-->
<!--        url: 'https://www.baidu.com',-->
<!--        port: 443-->
<!--    };-->
<!--    // 常量的引用类型值可以修改,为了避免修改可以进行锁定常量的引用类型-->
<!--    Object.freeze(HOST);-->
<!--    HOST.port = 80;-->
<!--    console.log(HOST); //{url: 'https://www.baidu.com', port: 443}-->
<!--</script>-->

<!--11 标量与引用类型的传值与传址特性-->
<!--<script>-->
<!--&lt;!&ndash;字符串和数值类型传的是值(标量类型),对象传的是地址(引用类型)&ndash;&gt;-->
<!--// 传值-->
<!--let a = 1;-->
<!--let b = a;-->
<!--console.log(a, b); // 1 1-->
<!--b = 3;-->
<!--console.log(a, b); // 1 3-->

<!--// 传址-->
<!--let e = {name: "hello"};-->
<!--let f = e;-->
<!--console.log(e ,f); // {name: 'hello'} {name: 'hello'}-->
<!--f.name = "world";-->
<!--console.log(e, f); // {name: 'world'} {name: 'world'}-->
<!--</script>-->

<!--
(1) 基本类型复制是值的复制,互相不受影响。
(2) 对于引用类型来讲,变量保存的是引用对象的指针。变量间赋值时其实赋值是变量的指针,这样多个变量就引用的是同一个对象。
-->

<!--12  null与undefined详解-->
<!--null 用于定义一个空对象,即如果变量要用来保存引用类型,可以在初始化时将其设置为 null-->
<!--null 针对引用类型,undefined针对的是值类型-->
<!--null 引用类型--对象,undefined 基本类型--字符串--没有值-->
<!--<script>-->
<!--    let a;-->
<!--    let b = null;-->
<!--    console.log(typeof a, typeof b); // undefined object-->

<!--    function show(name) {-->
<!--        console.log(name)  //(函数参数未传值)undefined-->
<!--    }-->
<!--    console.log(show())   //(函数没有返回值)undefined-->
<!--</script>-->
<!--
(1) 未赋值与未定义的变量值都为 undefined,建议声明变量设置初始值,这样就可以区分出变量状态了。
(2) 函数参数不传值或无返回值是为undefined。
(3) null 用于定义一个空对象,即如果变量要用来保存引用类型,可以在初始化时将其设置为 null。
-->

<!--13 use strict严格模式高质量代码守卫-->
<!--
(1) 严格模式要求变量必须要有声明关键字,比如 var/let/const 。
(2) 严格模式可以让我们及早发现错误,使代码更安全规范,推荐在代码中一直保持严格模式运行。
(3) 严格模式对当前作用域及子作用域影响。
-->
<!--<script>-->
<!--    "use strict";-->

<!--    web = "hello world"-->
<!--    console.log(web) // Uncaught ReferenceError: web is not defined-->
<!--</script>-->

</body>
</html>

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/274750.html

(0)
上一篇 2022年7月17日 01:59
下一篇 2022年7月17日 02:09

相关推荐

发表回复

登录后才能评论