JavaScript基础(3)


每日一记

循环

while循环
let i = 0;
while (i < 3) {           #条件的结果会被转化为布尔值
  alert( i );
  i++;
}

如果循环体只有一条语句(单循环体),则可以省略大括号

do…while循环
let i = 0;
do {
  alert( i );
  i++;
} while (i < 3);

将条件检查移至循环体下面
先执行循环体,然后检查条件,当条件为真时,重复执行循环体

for循环
for (begin; condition; step) {
  循环体
}
begin进入循环时执行一次
condition判断条件
body条件为真时,重复运行
step每次循环体迭代后执行

内联变量声明:
  函数在执行时,会先在自己的函数体里查询变量,如果没有,才会一级一级往上查找。函数show()在执行时,输出第一个变量a是undefined是因为它现在自己的执行环境里查询到变量a已声明,即变量提升(即变量可以提前声明但是赋值是不可以的),此时就输出了undefined。
  因此会出现变量污染现象
省略语句段:
  不需要做任何事的部分,就可以省略 begin 语句段
  注意for的两个;必须存在

break与continue

一,普通
用法与python一样
但是,禁止break/continue在‘?’的右边
所以,不建议使用?代替if语句
二,进阶

标签(在循环之前带有冒号的标识符)
break <labelName> 语句跳出循环至标签labelName:处
continue <labelName> 语句执行跳转到标记循环的下一次迭代
可以将标签移至单独一行

break 指令必须在代码块内
continue 只有在循环内部才可行
switch

至少一个 case 代码块和一个可选的 default 代码块
switch(x) {
  case 'value1':  // if (x === 'value1')
    ...
    [break]
  case 'value2':  // if (x === 'value2')
    ...
    [break]
  default:
    ...
    [break]
}
流程:
判断条件从成立的开始往下执行直到break,若无break则走到尾(包括default)

分组:
case 3: // (*) 下面这两个 case 被分在一组,满足一个条件就执行,原理是没有break
case 5:
  alert('Wrong!');
  alert("Why don't you take a math class?");
  break;

函数

在 JavaScript 中,函数不是“神奇的语言结构”,而是一种特殊的值
创建函数的三种方法:函数声明,函数表达式,箭头函数

function name(parameter1, parameter2, ... parameterN) {
  ...body...
}
name();
首先是关键字,然后是函数名,然后是括号之间的参数列表(用逗号分隔),最后是花括号之间的代码(函数体)
parameter是函数参数,下面引用函数时可以使用它作为参数(argument)
未提供parameter时,那么相应的值就会变成undefined(默认参数)
可以text = "内容"这样子来传参
返回值return执行时,函数停止,并将值返回给调用代码,没有返回值会导致函数立即退出并为undefined

局部变量:
在函数中声明的变量只在该函数内部可见

外部变量:
函数也可以访问外部变量
函数对外部变量拥有全部的访问权限。函数也可以修改外部变量。
函数内部声明了同名变量,那么函数会遮蔽外部变量

默认参数的计算:
在JS中,函数在没带个别参数的情况下被调用,默认参数会被计算出来。
如果传递了参数text,那么anotherFunction()就不会被调用。
如果没传递参数text,那么anotherFunction()就会被调用。
function showMessage(from, text = anotherFunction()) {
  // anotherFunction() 仅在没有给定 text 时执行
  // 其运行结果将成为 text 的值
}

也可以这样

function showCount(count) {
  // 如果 count 为 undefined 或 null,则提示 "unknown"
  alert(count ?? "unknown");
}
showCount(0); // 0
showCount(null); // unknown
showCount();                        // unknown

或者这样

function showMessage(text) {
  // ...
  if (text === undefined) {         // 如果参数未被传递进来
    text = 'empty message';
  }
  alert(text);
}
showMessage();                      // empty message

还可以这样

function showMessage(text) {
  // 如果 text 为 undefined 或者为假值,那么将其赋值为 'empty'
  text = text || 'empty';
  alert(text);
}
showMessage();                     // empty

返回值

function doNothing() { /* 没有代码 */ }
alert( doNothing());
函数无返回值,它就会像返回 undefined 一样
空值的 return 和 return undefined 等效
如果想要将返回的表达式写成跨多行的形式,那么应该在return的同一行开始写此表达式(比如先写个括号)

总结

作为参数传递给函数的值,会被复制到函数的局部变量。
函数可以访问外部变量。但它只能从内到外起作用。函数外部的代码看不到函数内的局部变量。
函数可以返回值。如果没有返回值,则其返回的结果是 undefined。
为了使代码简洁易懂,建议在函数中主要使用局部变量和参数,而不是外部变量
获取参数、使用参数并返回结果的函数更容易理解。
一个好的函数名能够让我们马上知道这个函数的功能是什么,会返回什么。
一个单独的函数不仅更容易测试和调试 —— 它的存在本身就是一个很好的注释!

每日一句

一月添香
二月夜未央
三月情诗慌张
四月对镜补红妆
五月相携游马十方
六月日日笙歌抛流光
七月为卿斟唱曲水流觞
八月年华辗转处陌上成双
九月田中百花争艳怜意满腔
十月眠里光阴归去思念倾满江
十一月冬雷阵阵我笑悲歌不恸上苍
十二月天寒地冻凭楼伫等把痴梦熬荒
可叹,人间再无双


评论
  目录