2020-11-03 春招复习

函数基础、函数种类、形实参及映射

耦合:各个代码块中重复的代码太多了

编程的基本原则:高内聚、低耦合 -> 模块的单一责任制

解耦合 -> 函数

//最基本的函数写法 - 函数声明

function test(参数){

​ 函数的执行语句;

}
函数名的命名规则
//不能数字开头
//字母_$
//包含数字
//小驼峰命名 复合单词myWonderfulTest

在函数内声明变量的时候尽量不要这样写 var a = b = 1;
可能会造成b泄漏的问题 因为这里省略了 var b;

表达式 字面量
var test=function test1(){
var a = 1,
b = 2;
console.log(a,b);
}
test1内部可见,外部不可见
var test = function(){//-> 匿名函数表达式 函数字面量
var a = 1,
b = 2;
console.log(a,b);
}

函数的组成
function 函数名 参数(可选) 返回值() return(如果没写 会自动生成)

形参和实参
形参和实参数量可不等
console.log(arguments);//可以知道实参传过来了什么值 arguments是数组
console.log(方法名.length);//可以知道形参的数量是多少

例子:一个函数被调用时,累加他的实参值
function sum()
{
var a = 0;
for(var i = 0; i < arguments.length; i++)
{
a += arguments[i];
}
console.log(a);
}
sum(1,2,3,4,5,6,7,8)

实参里面传了值得可以在函数里面去修改这个值,如果说实参里面都没有传入这个值,形参给进去修改是不会赋值上去的(简而言之就是没有分配空间)实参和形参在内存里面是存在一个映射关系的
例子:
function test(a,b){
b = 3;
console.log(arguments[1]);
}
test(1);//console.log只会打印出来undefined

//false= undefined null NaN " "0 false

形参默认值的使用//es6的写法
function test(a = 1,b){
console.log(a);
console.log(b);
}
test(undefined,2);
es6之前版本实现默认值
function test(a,b){
var a=arguments[0] || 1;
var b=arguments[1] || 2;
console.log(a + b);
}还可以用 typeof来判断是否等于undefined 或者三元运算

预编译
1.检查通篇的语法错误
1.5预编译的过程
2.解释一行,执行一行
!函数声明整体提升,变量只有声明提升,赋值是不提升的

暗示全局变量 imply global variable
var a = 1;
b = 2;
console.log(window.b);//a = window.a
//b = window.b
window = {
a:1,
b:2
}
函数预编译过程
AO activation object
活跃对象、函数上下文
1.寻找形参和变量的声明
2.实参值赋值给形参
3.找函数声明,赋值
4.执行

GO global obeject 全局上下文
1.变量
2.找函数声明
3.执行

例子:1.
var b = 3;
console.log(a);
function a(a)
{
console.log(a);
var a = 2;
console.log(a);
function a(){
var b = 5;
console.log(b);

}

}
a(1);

function test()
{
return a;
a = 1;
function a (){}
var a = 2;
}
console.log(test());

面试题
var a = false + 1;
console.log(a);//1

猜你喜欢

转载自blog.csdn.net/lirenci123/article/details/109481210