目录
经典购物车案例
// 3. 已知,有商店的会员卡,里面的余额还剩1500
// 已知,商店有促销活动,消费满1000会打9折
// 要求:让用户输入商品单价与数量,点击”支付”按钮
// 如果用户本次消费金额<1500,弹窗显示:
// 支付成功,余额剩余:XXX元
// 如果用户本次消费金额超出会员卡余额,弹窗显示:余额不足,会员卡余额1500元
// 按钮绑定点击事件
btn.onclick = function () {
var total = price.value * num.value
console.log("商品原价:" + total)
// 满1000打九折
if (total >= 1000) {
total *= 0.9
console.log("打折后的价格:" + total)
}
// 会员卡余额
var card = 1500
// 剩余金额
var rest = card - total
// 能否支付成功
rest >= 0
? alert("支付成功,余额剩余:" + rest + "元")
: alert("支付不足,会员卡余额:" + card + "元")
price.value = ''
num.value = ''
}
do-while 循环
do {
循环体
}while(循环条件)
注意:do-while循环,第一轮不会判断,直接执行循环体内的内容,第二轮开始判断,符合条件,继续执行,不符合条件,结束循环。
for 循环
for(初始值;循环条件;增量){
循环体
}
- 循环的开始条件(var x = 1,sum =0;)可以定义多个变量,用逗号隔开。
- 循环条件有多个,如果发生冲突,要保持一致
- 冲突时,取决于最后的循环条件
continue与break
- continue跳过本轮循环中的剩余循环体,开启下一轮循环
- break直接结束循环
- break用于内层循环,只结束当前内层循环
循环嵌套
一个循环的循环体出现了另一个循环,叫循环嵌套
经典案例——倒三角
var str = ""
for (var i = 10; i >= 1; i--) {
for (var j = 0; j < i; j++) {
str += "❤" //拼接*
}
str += "\n"
}
console.log(str)
函数
自定义函数,将需要自行编辑要处理的逻辑,封装成一个函数,函数必须要调用才能执行,格式:函数名称()
参数函数(i,b)形参:函数中用于接收实参的变量;实参:调用时实际传的数据
function 函数名称(){
函数体
}
function 函数名称(参数列表){
函数体
}
函数名称(参数1,参数2)
- 实参赋给形参
- 实参数目与自定义函数的形参对应
- 未给形参传值,则为undefined
- 调用函数时,实参个数与形参个数可以不匹配(不推荐)
带返回值自定义函数
function 函数名称(参数列表){
函数体
return 结果
}
调用格式:var 变量 = 函数名称(参数列表)
- return用于返回函数执行后的结果
- 外部想要获取到函数return的结果,需要调用函数
- 函数return后没有值,返回undefined,return后的代码不执行,遇到return,函数直接结束
return和break
- return用于函数中,结束函数的调用并返回结果
- break用于循环和switch-case,结束单层循环,或switch-case语句
变量作用域
- 全局作用域:在函数以外的作用域,只有一个全局作用域
- 全局变量:在全局命名空间中声明的变量或函数,位于全局作用域中,在代码的任何地方可以访问
- 在函数内,不+var声明的变量是全局变量,
- 函数作用域:在函数以内的作用域,可能有多个函数作用域
- 函数变量:在函数中声明的变量和参数,只能在函数内部访问,不能在外部访问
- 形参局部变量,不可以在全局范围内使用
js预加载/预解析
- 在程序执行前,会将用var声明的变量提升到所在作用域的最前面
- 注意:只提升声明部分,赋值不提升
- 用var声明的变量,变量提升,
变量的查找规则
- 变量提升+就近原则,当前作用域下有需要查找的变量,则不再向全局作用域查找。
- 形参属于局部变量,只能在函数内访问
函数作用域
- 全局函数:在全局作用域下创建的函数,可以在任何作用域下调用
- 局部函数:在函数作用域下创建的函数,只能在当前函数的作用域下调用
作用域中查找变量,首先在当前作用域中查找,如果当前作用域不存在,则会向外部作用域查找,直到达到全局作用域,这个过程叫作用域链。
函数提升:程序执行之前,会将函数整体提升到所在作用域的最前面
普通函数声明
function 函数名称(参数列表){
函数体
}
函数表达式——匿名函数
var xxx = function(){
函数体
}
匿名函数赋值给变量,变量名称就是函数名称
函数名称 || 函数名称()
- 函数名称,变量中保存函数类型的值
- 函数名称()调用函数,执行函数体代码
函数声明 || 函数表达式
- 函数声明,存在函数的整体提升,可以先调用,在创建
- 函数表达式,只存在声明提升,必须先创建,再声明