js第一课

1.js的基本知识和变量声明

JavaScript的官方名称是ECMAScript,是一种属于网络的脚本语言,广泛用于web前端,为网页带来各种动态功能

js的诞生在1995年

2009年 es5诞生 可以用于当时多有的浏览器

2015年 es6

2016年 es7

....

2.脚本的定义:

1.和style的样式一样,我们可以引入JavaScript脚本,语法为:

<script src="脚本路径"></script>

2.脚本也可以添加在html里面的head头部里面,但是会有延迟效果,因为浏览器的解析器会先解析头部的js代码,在解析body里面的html代码

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
​​<script>     
    alert("1");
</script>
</head>
<body>      
    <h1>1</h1>
</body>

在上面的列子中,浏览器会先解析alert(“1”),才会开始显示body里面的h1的标签

3.避免这种延迟的方法有两种,1.用window.onload()里面写js的代码2.我们把js代码写到html标签的后面,也可以。

4.我们一般推荐我们把js的代码写到body里面的标签的后面

3.自动分号:

使用分号代标着一段代码的执行完成,当我们没有输入分号时,如果有换行符号会帮我们自动添加上,减少错误。

1.我们一般写完一段代码是最好把分号加上。避免错误的产生。

4.变量的声明:

1.我们在es5中只有两个声明变量var function 但是在es6中新增了let/const/symbol三种方法

2命名规则:

1.js中的变量是弱类性,可以保存所有的数据类型,及变量没有类型,而值有类型变量名一般以字母,$,_开始,后跟字母和数字,切记不能以数字开头。

2.变量的名字不能是关键字:class public等

let public = "liquan"; //这种命名就是错的

3.也可以声明多个变量:

let n = 12, m=13;

3:弱类性:

1.在js中变量的类型是由值的类型的决定的

4变量的提升:

1.这涉及到js的语法规定:是先定义(声明)后执行:意思就是先  浏览一遍代码,把变量的声明提升到最前,这叫做变量的提升,但是必须是var声明的变量才有,但是它的执行还是在原位置

4.TDZ(暂时性死区)

1.用let/const声明的变量都有暂时性死区(TDZ),指变量在作用域中已经存在,但是必须在let/const声明的变量之后

2.TDZ让程序保持了先声明后执行的习惯,让程序更加稳定

(1)先声明后执行

(2):建议使用let声明变量,少用var

3.如果使用let/const声明的变量先使用后声明会报错,因为用let/const声明变量 前 存在暂时性死区。
                           

 console.log(num); // 会报错 num is not undefined                            
 let num = 12;

4.在函数中有let声名,未声明先使用也会报错
                             

Hd = "liquan";                              
function run(){                             
     console.log(Hd);                            
     let Hd;                        

}                

run() //这段代码也会报错 Hd is not defined

5.在下面的代码中 b没有声明赋值,所以不能直接引用
                       

 function hd(a=b,b=3){}                       
  hd ()//Cannot access 'b' before initialization

6.在下面的代码中b已经赋值,所以a可以使用b变量
                   

 function hd(a=b,b=3){}                       
  hd ()//Cannot access 'b' before initialization

5.块状作用域:

let const var 的相同点:

1.let/const 和var 他们都可以在全局作用域中声明全局变量。可以在函数中使用

2.他们在函数中声明的变量只能在该函数及其子函数中使用

3.他们在函数中声明的变量外部无法访问。

var:

1使用var声明的变量存在于最近的函数或者全局的作用域中没有块级作用域

2.没有块级作用域很容易导致全局作用域污染

function run(){
    web = 12
}
console.log(web); // web = 12 这就污染了全局作用域

3.var 也容易污染全局作用域

var i = 6
for(var i =0;i<=4;i++){
    console.log(i);
}
console.log(i); / / i = 4 i=4这也污染了全局变量

4.使用let块级作用域就不会

var i = 6
for(let i =0;i<=4;i++){
    console.log(i);
}
console.log(i); / / i=4 i = 6
  1. 5.var声明的全局变量存在于 window对象中,容易造成window全局变量的污染,而let声明的变量就不 会存在与window对象中

    var num = 12;               
    console.log(window.num); //12 污染了window对象

    let

    1.用let声明的变量有块级作用域声明的变量只在块级作用域中生效,块外部的是无法访问的

    2.块内部的可以访问上层作用域的变量

         

    let num = "liquan";                      
    function run (){                               
        let r = "li"                               
        console.log(num);                     
     }                             
     run() //liquan

    3.在不同的作用域可以声明相同的名字的变量,不会影响别个作用域中的值;

          

    let num = "liquan";                      
    function run (){                           
        let num = "liu"                            
        console.log(num);                    
    }                      
    run()                      
    console.log(num); //liu liquan

    const:

    1.使用const来声明常量和其他语言差不多,比如可以用来声明后台接口的URI的地址。

    常量的名字建议最好大写

    声明的常量不允许在重新赋值

    声明时必须同时赋值

    可以修改引用类型的值    

    注:因为const声明的变量不允许改变地址

    2。下面的代码是错误的,因为const声明的变量不允许重新赋值

    const url ="htttpls"                 
     url="5454";                   
    console.log(url); //报错;常变量被赋值了 Assignment to constant variable.

    3.const声明的对象可以改变它的属性值

                     

      const name ={                   
              url:"httotot",                    
              num:12                     
        };                    
    name.num = 13;                     
    console.log(name.num); //13

    重复定义

    1.使用var重复定义变量不会报错,只会修改值

           

     var price = 18;               
     var price = 19;          
     console.log(price); //price = 19

    2.使用let就不会发现这种情况,因为let声明的变量不允许在同一作用域中重新声明,会报错

     let price = 18;          
      let price = 19;            
     console.log(price); //erro:

    3.在不同作用域中可以重新声明

    4.let声明的变量不存在于window对象中

    Object.freeze是对象中的静态方法

    1.如果冻结变量后,变量也不可以别修改了,使用严格模式会报错。

    "use strict"
    const name = {     
        url:"hrskdw",    
        num:12 
    } 
    Object.freeze(name); //冻结这变量  
    name.num=13;   
    console.log(name.num);//Cannot assign to read only property 'num' of object

    传值 传址

    1.基本数据类型是指数值,字符串等简单的数据类型,引用类型对象数据类型

    2.基本数据复制是值的复制,基本数据是相互独立的,所以改变值互不影响

    3.对于引用类型来讲,变量保存的是引用对象的指针,变量赋值给另一个变量赋值的变量的指针,所以多个对象的引用的就是同一个对象。

     

    undefined

    1.未声明的变量未赋值的变量都返回undefined,函数没有定义return也会返回undefined,所以建议声明变量时,定义一个初始值,这样好分辨变量的状态。

    2.undefined是一种数据类型

    null:

    null定义一个空对象,即如果变量要用来保存引用类型,可以初始化为null

    2.null是一种数据类型。

严格模式

1.严格模式可以让我们及早的发现错误,使代码更安全,规范,推荐代码一直在严格模式下运行。

基本差异:

1.使用严格模式:变量必须使用关键词声明,未声明的变量不允许赋值。

            "use strict";

url = 'houdunren.com';                //url is not defined

2.关键词不允许做变量使用。

3.变量不允许重复定义。

解构差异:

非严格模式可以不使用声明指令,严格模式下必须使用声明。所以建议使用 let 等声明。

//"use strict";
({name,url} = {name:'后盾人',url:'houdunren.com'});
console.log(name, url);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值