Javascript

1. JavaScript 引入方式

  1. 内部脚本
    直接写在<script></script>标签内部
  2. 外部脚本
    通过script的src属性引入
  3. 行内脚本
    通过元素的属性添加到元素上

2. JavaScript 加载方式

2.1 默认同步

  • 浏览器解析html文档,一旦遇到script标签会中断页面解析,下载js代码并执行
  • 当执行完js代码后再继续解析之后的html代码

2.2 异步加载

  • defer
    • js的下载与html的解析同步执行,不会中断解析,直到dom创建完成才执行
    • <script defer src="test.js"></script>

    • 涉及dom操作,或对js的执行顺序有要求
  • async
    • 只关注js的下载不会中断html的解析,只是实现js下载与html解析同步
    • 对脚本顺序无要求,只要求快速下载js

总之,放在</body>标签前就可以

3. JavaScript调试

  • console.log()
    输出信息
  • console.table()
    表格形式输出复合类型数据
  • console.dir()
    输出对象的属性和方法

占位符
console.log(“用户名:%s, 密码:%s”,user.name,user.password)

  1. let obj = {
  2. id: 0001,
  3. age: 22,
  4. name: "hehe"
  5. }
  6. console.log("Using console.log()");
  7. console.log(obj);
  8. console.log("---------------------");
  9. console.log("Using console.table()");
  10. console.table(obj);
  11. console.log("---------------------");
  12. console.log("Using console.dir()");
  13. console.dir(obj);

4. JavaScript 变量,常量

4.1 变量

  • 声明 (一个变量不能被重复声明)
    • let a;
  • 第一次赋值:初始化
    • let b = 1;
  • 第一次赋值后再赋值:更新

4.2 常量

  • 声明
    • const GENDER =”male”;
  • 声明时必须赋值,之后不能更改

4.3 标识符

  • 字母,数字,下划线,$
  • 大小写敏感
  • 不能使用保留字/关键字
  • 驼峰式命名 userName
  • 类/构造函数 UserName
  • user_name
  • oBtn

4.4 变量类型

  • 原始类型
    • 数值,字符串,布尔,undefined,null
  • 引用类型
    • object, array, function(object)

4.5 类型转换

  • 通常相同类型数据计算结果才有意义
  • ==
    • 非严格判断,只比较值,两边比较的类型不同时自动类型转换
  • ===
    • 值相等且类型相同才返回true

5. JavaScript 函数

5.1 函数声明

  1. let name = "HaHa";
  2. function getName(name) {
  3. return "My name is " + name;
  4. }
  5. console.log(getName(name));

输出:

5.1.1 函数可以重名

  1. let name = "HaHa";
  2. function getName(name) {
  3. return "My name is " + name;
  4. }
  5. function getName(name) {
  6. return "我的名字是 " + name;
  7. }
  8. console.log(getName(name));

输出:

5.1.2 函数声明提升

命名的函数声明会被自动提示,即先调用后声明也可以

  1. let name = "HaHa";
  2. console.log(getName(name));
  3. // function declaration
  4. function getName(name) {
  5. return "My name is " + name;
  6. }

输出:

5.1.3 阻止函数声明提升

使用匿名函数

  1. let sum = function (a, b) {
  2. return a + b;
  3. }
  4. console.log(sum(1, 2));
  5. //3

5.2 函数的参数与返回值

  • 调用时传入的参数数量必须与函数声明时所需的参数数量一致
  • 如果少于函数所需的参数,可以在函数声明时设置默认值
  1. let sum = function (a, b = 2) {
  2. return a + b;
  3. }
  4. console.log(sum(1));
  5. //3

5.2.1 归并参数

rest语法,将所有参数放到数组中

  1. let summary = function (...arr) {
  2. let e = 0;
  3. for (let index = 0; index < arr.length; index++) {
  4. e += arr[index];
  5. }
  6. return e;
  7. }
  8. console.log(summary(1, 9, 2, 8, 3, 7, 4, 6, 5));
  9. //45

5.2.2 函数返回多个值

使用数组或对象的形式返回

  1. function getUser() {
  2. return [20, "Tom", "tom123"];
  3. }
  4. console.table(getUser());
  5. function getAddress() {
  6. return { room: 0101, street: "Goodwood Road", post: 5000 };
  7. }
  8. console.table(getAddress());

5.2.3 高阶函数

将函数作为参数,或使用函数作为返回值的函数

  1. function foo(p) {
  2. //console.log(p)
  3. return function () {
  4. return "a";
  5. };
  6. }
  7. let f = foo(function () { });
  8. console.log(f());
  9. //a
  • 回调函数

函数作为参数

  1. document.addEventListener("click", function () {
  2. alert("hehe");
  3. });
  • 偏函数
  1. //声明
  2. sum = function (a) {
  3. return function (b) {
  4. return function (c) {
  5. return function (d) {
  6. return a + b + c + d;
  7. }
  8. }
  9. }
  10. };
  11. //调用
  12. let result = sum(1)(2)(3)(4);
  13. console.log(result);
  14. //10
  • 纯函数
    函数的返回结果只与函数本身的参数有关
  1. function getPrice(p, n) {
  2. return p * n;
  3. }
  4. getPrice(10, 5);
  • 箭头函数
  1. let sum = function (a, b) {
  2. return a + b;
  3. }
  4. console.log(sum(1, 2));
  5. //箭头函数简化匿名函数
  6. sum = (a, b) => {
  7. return a + b;
  8. }
  9. console.log(sum(2, 3));
  10. //如果箭头函数的代码体只有一行语句
  11. sum = (a, b) => a + b;
  12. console.log(sum(3, 4));

*如果函数中使用到this关键字,就不要使用箭头函数,不能当构造函数使用

  • 立即执行函数 IIFE

声明和调用放在一起

  1. (function(p, n) {
  2. console.log(p * n)
  3. })(5, 10);
  4. //50
  5. let sum = function (a, b) {
  6. return a + b;
  7. }(1, 2);
  8. console.log(sum);
  9. //3

*在过去,立即执行函数可以用来防止函数内的局部var变量作用域提升到全局

更多相关文章

  1. js 引入方式,常量,变量,函数的声明和使用----0331
  2. 函数作用域与闭包-回调函数-函数的多值返回类型方式
  3. 冒泡排序函数
  4. 【JS基础入门】JavaScript基础之作用域、闭包、迭代器、构造函数
  5. C语言快排qsort()函数
  6. js作业一常识类
  7. 数组函数、json、ajax、cors跨域
  8. golang核心原理-协程栈
  9. Python可以比C++更快,你不信?

随机推荐

  1. Android 4编程入门经典—开发智能手机与
  2. Android编译过程详解
  3. [Android 新特性] 改进明显 Android 4.4
  4. Activity属性设置大全
  5. Android GridView 使用示例
  6. 从零开始--系统深入学习android(实践-让我
  7. android检测当前网络是否可用
  8. Android笔记_Linearlayout(线性布局)
  9. Android全屏显示的两种方式
  10. Android进程 与 消息模型