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
严格模式
基本差异
- 变量必须使用关键词声明,未声明的变量不允许赋值
- 强制声明防止污染全局
- 关键词不允许做变量使用
- 变量参数不允许重复定义
- 可以单独为函数设置严格模式
解构差异
- 非严格模式可以不使用声明指令,严格模式下必须使用声明。