一、函数/方法:
封装一个专门任务的步骤的代码段,起一个任务名
何时使用函数:有一个专门的任务,可能重复使用!
如何创建函数:
语法:function 函数名([参数列表]){
——函数体
[return 返回值]
}
如何调用函数:
语法:var 返回值=函数名([参数值列表]);
函数的参数:专门接收传入函数内的数据的*变量*
何时定义参数:参数用于规定函数正常执行时,必须的数据
参数可以让方法变得灵活!
何时/如何使用参数:
调用时:方法名(参数1的值,参数2的值...)
强调:参数值的顺序和个数,应该和方法定义时匹配
返回值:方法调用后,返回的执行结果!——1个数据
强调:方法仅负责返回数据,不负责保存数据!
调用有返回值的方法时,都要用变量接住返回值!
如何定义:return 要返回的数据;
1. return -->退出/结束方法的执行
2. 将返回值返回到内存中
二、变量作用域:一个变量的可用范围。
js中2种作用域:1. 局部作用域/函数作用域
2. 全局作用域
按作用域划分变量:2种:
局部变量:在函数内部创建的变量,
比如:2种:*函数参数*;在函数内用var声明的
*局部变量随函数调用而创建,随调用完而释放。
全局变量:在全局范围创建的变量,
比如:不属于任何函数的变量
*程序的任何位置都可以访问全局变量*
为什么要有作用域:避免冲突和歧义。
全局变量 vs 局部变量:
全局变量:优:共享使用!
缺:不安全,容易被“污染”
局部变量:优:安全,私有!
缺:不可重用!
三、声明提前:在程序开始执行前,都会先预读所有的var和function,将所有的var和function都提前到*当前作用域*的顶部定义。
*强调:仅声明提前!赋值留在原地!*
***按值传递:变量作为参数传递给方法时,
都会将变量内的值,复制一个副本给参数变
量
结果:对于*原始类型*来说:
方法内修改参数变量的值,不影响方法外的原变量
对于*引用类型*不适用!
四、全局函数:不需要任何对象,就可以直接调用的函数
比如:parseInt/Float(str)
isNaN(n)
isFinite(n):判断n是否在有效范围内
infinity和NaN都会返回false,其余返回true
eval("js语句"):执行一条字符串格式的js语句
?word=%E5%BC%A0 多字节字符的utf-8编码!
张
unicode:汉字:2字节 字母/数字:2字节
utf-8:汉字:3字节 字母/数字:1字节
URL:1.限制:url中不允许包含多字节字符!
2. 限制:url?后的参数中,不允许包含url保留字
比如: http://tmooc.cn/?word=http://tmooc.cn
解决:先编码,再发送。
收到数据时,先解码,再处理
编码:将url中多字节字符 ,准为utf-8编码对应的单字节
解码:将单字节utf-8编码,恢复成多字节字符
五、分支结构:
程序三大结构:
顺序:程序默认都是从上向下顺序执行。
分支:根据不同条件,选择不同的执行路线
循环:程序反复执行同一个代码段
分支结构:3种:
1. if结构:1件事,满足条件就执行,不满足条件就不执行
语法:if(条件){
满足条件时,才做的事
}
2. if...else...结构:2件事,二选一执行!
语法:if(条件){
满足条件时,才做的事
}else{
不满足条件时,才执行的事
}
3. if...else if...结构:多个条件,多个分支时
语法:if(条件1){
满足条件1执行的代码
}else if(条件2){
满足条件2执行的代码
}else if(条件3){
满足条件3执行的代码
}... ...
}else{
不满足之前所有条件时,执行的代码——默认值
}