Javascript学习 -基础知识

146 阅读3分钟

Javascript学习

一、基础知识

起步入门

语言介绍

适用场景

网页端,服务器后台,移动手机APP,跨平台的桌面应用程序

发展历史

学习准备

打开控制台快捷键:

Mac:option+command+j

运行流程

脚本定义

两种脚本方式

  • 内嵌脚本
  • 外部文件

注意:引入外部文件在标签体内的脚本不回执行,下面的alert弹窗不会执行

<script src="a.js">
  alert('弹窗');
</script>

避免延迟

script标签最好放在body元素的末尾,以防止阻塞页面的渲染

代码注释

自动分号

变量声明

命名规则

变量声明

弱类型

变量提升

  • var声明的变量会被提升到前面
console.log(a); // undefined
var a = 1;
console.log(a); // 1
  • if (false)中定义的var也会发生变量提升,注释掉if结果会不同
var web = 'bbb';
function hd() {
  if (false) {
    var web = 'bbb';
  }
  console.log(web);
}
hd(); // undefined

TDZ-暂时性死区

暂时性死区:变量在作用域内已经存在,但必须在let/const声明后才可以使用。

  • 变量要先声明,后使用
  • 建议使用let/const而少使用var

下面的代码b没有声明赋值不允许直接使用

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

因为a已经赋值,所以b可以使用a变量,下面代码访问正常

function hd(a = 2, b = a) {}
hd();

块作用域

var/let/const共同点

var

var没有块级作用域,会污染全局

for (var i = 0; i < 5; i++) {
  console.log(i); // 0 1 2 3 4
}
console.log(i); // 5

使用let有块级作用域时则不会

for (let i = 0; i < 5; i++) {
  console.log(i); // 0 1 2 3 4
}
console.log(i); // undefined

let

  • let存在块作用域特性,变量只在块域中有效
  • 块内部是可以访问到上层作用域的变量

const

  • 只能声明一次变量,不允许再次全新赋值
  • 但是可以修改引用类型变量的值

Object.freeze

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

"use strict"
const obj = {
  name: 'xiaoming',
  age: 18
}
Object.freeze(obj);
obj.age = 19; // 报错:cannot assign to read only property, 非严格模式下不会报错
console.log(obj.age); // 不会打印出来

传值与传址

  • 基本数据类型指数值、字符串等简单数据类型,引用类型指对象数据类型。
  • 基本类型复制是值的复制,互相不受影响。
  • 对于引用类型来讲,变量保存的是引用对象的指针。变量间赋值时其实赋值是变量的指针,这样多个变量就引用的是同一个对象。

undefined

  • 未赋值的变量为undefined
  • 函数参数没有的话也是undefined,函数无返回值,返回的也是undefined

null

严格模式

基本差异

  • 变量必须使用关键词声明,未声明的变量不允许赋值
  • 强制声明防止污染全局
  • 关键词不允许做变量使用
  • 变量参数不允许重复定义
  • 可以单独为函数设置严格模式

解构差异

  • 非严格模式可以不使用声明指令,严格模式下必须使用声明。