JavaScript基础(4)


每日一记

函数表达式

let sayHi = function() {
  alert( "Hello" );
};
function关键字后面没有函数名。函数表达式允许省略函数名
注意末尾会有个分号!
因为这是以 function(…) {…} 的形式创建的。它不是函数语法的一部分。
含义:"创建一个函数并将其放入变量sayHi中"。

alert( sayHi );         // 显示函数代码————因为函数是一个值
alert( sayHi() );       // 执行函数
let func = sayHi;       //将 sayHi 复制到了变量 func
回调函数
function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}

function showOk() {
  alert( "You agreed." );
}

function showCancel() {
  alert( "You canceled the execution." );
}

// 用法:函数 showOk 和 showCancel 被作为参数传入到 ask
ask("Do you agree?", showOk, showCancel);

showOk 是回答 “yes” 的回调,showCancel 是回答 “no” 的回调。

函数表达式 vs 函数声明

1.语法
函数声明:在主代码流中声明为单独的语句的函数
函数表达式:在一个表达式中或另一个语法结构中创建的函数。下面这个函数是在赋值表达式 = 右侧创建的
2.创建函数时机
在函数声明被定义之前,它就可以被调用。
函数表达式是在代码执行到达时被创建,并且仅从那一刻起可用。
3.块级作用域
严格模式下,当一个函数声明在一个代码块内时,它在该代码块内的任何位置都是可见的。但在代码块外不可见。

let age = 16;              // 拿 16 作为例子
if (age < 18) {
  welcome();               // \   (运行)
  function welcome() {     //  |
    alert("Hello!");       //  |  函数声明在声明它的代码块内任意位置都可用
  }                        //  |  在花括号外部调用函数,我们看不到它们内部的函数声明
  welcome();               // /   (运行)
} else {
  function welcome() {
    alert("Greetings!");
  }
}
welcome();                 // Error: welcome is not defined

【正确写法】

let age = prompt("What is your age?", 18);
let welcome;
if (age < 18) {
  welcome = function() {
    alert("Hello!");
  };
} else {
  welcome = function() {
    alert("Greetings!");
  };
}
welcome(); // 现在可以了

【改进方法】

let age = prompt("What is your age?", 18);
let welcome = (age < 18) ?
  function() { alert("Hello!"); } :
  function() { alert("Greetings!"); };
welcome(); // 现在可以了

箭头函数

单行箭头函数:
let sum = (a, b) => a + b;
/* 这个箭头函数是下面这个函数的更短的版本:
let sum = function(a, b) {
  return a + b;
};
*/
alert( sum(1, 2) ); // 3

多行箭头函数:
let sum = (a, b) => {  // 花括号表示开始一个多行函数
  let result = a + b;
  return result;       // 如果我们使用了花括号,那么我们需要一个显式的 “return”
};
alert( sum(1, 2) );    // 3

从 => 的左侧获取参数,计算并返回右侧表达式的计算结果
用花括号括起来之后,需要包含 return 才能返回值(就像常规函数一样)
只有一个参数,还可以省略掉参数外的圆括号
没有参数,括号则是空的(但括号必须保留)

函数总结

1.函数是值。它们可以在代码的任何地方被分配,复制或声明。
2.如果函数在主代码流中被声明为单独的语句,则称为“函数声明”。
3.如果该函数是作为表达式的一部分创建的,则称其“函数表达式”。
4.在执行代码块之前,内部算法会先处理函数声明(所以函数声明在其被声明的代码块内的任何位置都是可见的)
5.函数表达式在执行流程到达时创建。
6.首选使用函数声明;仅当函数声明不适合对应的任务时,才应使用函数表达式。

javascript基础复习

1.语句用分号分隔
2.即使我们在某处添加了「额外的」分号,这也不是错误。分号会被忽略的。
3.尽量使用”use strict”
4.使用let,const(不变的,不能被改变),var(旧式的,稍后会看到)声明变量
5.变量是动态类型的,它们可以存储任何值
6.有 8 种数据类型:
  number — 可以是浮点数,也可以是整数,
  bigint — 用于任意长度的整数,
  string — 字符串类型,
  boolean — 逻辑值:true/false,
  null — 具有单个值 null 的类型,表示“空”或“不存在”,
  undefined — 具有单个值 undefined 的类型,表示“未分配(未定义)”,
  object 和 symbol — 对于复杂的数据结构和唯一标识符,我们目前还没学习这个类型。
7.交互:alert、prompt 和 confirm
8.二进制加号 + 可以连接字符串。如果任何一个操作数是一个字符串,那么另一个操作数也将被转换为字符串
9.三元运算符:cond?resultA:resultB。如果cond为真,则返回resultA,否则返回resultB
10.空值合并运算符:a??b的结果是a,除非a为null/undefined,这时结果是b。
11.在 for(let…) 循环内部声明的变量只在该循环内可见。但可以省略let并重用已有的变量。
12.break/continue允许退出整个循环/当前迭代。使用标签来打破嵌套循环
13.switch”结构可以替代多个if检查。它内部使用===进行比较。
14.prompt的结果是一个字符串,而不是数字
15.函数声明和循环语句后不需要加分号

其它说明

在浏览器中调试
代码风格!!!
注释

每日一句

从岐山到长安,高铁只需要一个小时就能抵达,这么一段路,丞相却走了一生。
从生至死,人需要经历百年,但有一段岁月,却跟着我走完了一生。


评论
  目录