4.函数重命名:
var 新函数名 = 旧函数名;
可以以var 返回值 = 新函数名(实参);
调用
5.匿名函数的定义
var func1 = function () {
console.log(‘匿名函数’)
}
func1();//调用
参数默认值
当实参传给形参个数不够时,形参会出现undefined的情况,此时我们可以给参数添加默认值
未设置默认值:
function slogan(num, time) {
for(var a = 1; a <= num; a++){
console.log(time + ‘点’ + a + ‘好好学习天天向上’);
}
}
slogan(10)
slogan(10,5)
结果:
undefined点1好好学习天天向上
undefined点2好好学习天天向上
undefined点3好好学习天天向上
undefined点4好好学习天天向上
undefined点5好好学习天天向上
undefined点6好好学习天天向上
undefined点7好好学习天天向上
undefined点8好好学习天天向上
undefined点9好好学习天天向上
undefined点10好好学习天天向上
5点1好好学习天天向上
5点2好好学习天天向上
5点3好好学习天天向上
5点4好好学习天天向上
5点5好好学习天天向上
5点6好好学习天天向上
5点7好好学习天天向上
5点8好好学习天天向上
5点9好好学习天天向上
5点10好好学习天天向上
设置默认值:
//方法一:
function slogan(num, time) {
if (time == undefined){
time = 7;
}
for(var a = 1; a <= num; a++){
console.log(time + ‘点’ + a + ‘好好学习天天向上’);
}
}
slogan(10)
slogan(10,5)
//方法二:
function slogan(num, time) {
time = time || 8;
for(var a = 1; a <= num; a++){
console.log(time + ‘点’ + a + ‘好好学习天天向上’);
}
}
slogan(10)
slogan(10,5)
设置了默认值,即使我没有传第二个参数,time也不会是undefined
方法一中,slogan(10)会打印出:“7点1好好学习天天向上”…
方法二中,slogan(10)会打印出:“8点1好好学习天天向上”…
设置了默认值的变量,在形参定义时要靠后,默认居后;
如:time设置了默认值,就要放在最后,实参传进去的时候,会先填没有设置默认值的参数age,要是time没有传实参,就用默认值,是个可选项
动态参数:
实参以数组arguments形式传给形参
当没有设置动态参数,且实参个数大于形参个数时,只会操作形参对应数据,剩下的参数不做处理
function add(x, y) {
return x + y;
}
var res = add(3,5,6,7);
console.log(res);
//结果为:8
此时:
arguments => [3,4,6,7]
x = arguments[0]
y = arguments[1]
函数的结果只计算x+y,等于8
设置动态参数,即循环处理传入的实参
function add() {
var z = 0;
for (var i = 0; i < arguments.length; i++){
z += arguments[i];
}
return z;
}
var res = add(3,5,6,7);
console.log(res);
//将arguments的元素都累加起来,结果为:21
1.作用域的定义:可访问变量的集合(对象,函数);定义了一个变量,这个变量可以被使用的范围
2. 分类(以函数做划分点):
全局作用域(变量):
在函数外定义的变量,在所有地方都能被访问;
局部作用域(变量):
在函数里定义的变量,只能在定义该变量的函数中使用
2.1在函数内如果修改了全局变量,全局变量是真的被修改了:
function add(){
y = 100;
console.log(‘add():’ + y);
}
var y = 1;
add();
console.log(‘全局:’ + y);
/*
结果输出:
add():100
全局:100
*/
2.2当全局变量和局部变量的变量名一致时:
局部变量不影响全局变量,其作用范围只在函数内;
全局变量也不能影响局部变量,其优先级低于局部变量
function add(){
var y = 100;
console.log(‘add():’ + y);
}
var y = 1;
add();
console.log(‘全局:’ + y);
/*
结果输出:
add():100
全局:1
*/
2.3当没有定义某全局变量y,在局部变量中也没有定义,而是直接使用,系统会将该变量视为全局变量(会引起歧义,非特殊情况还是不要这样使用)
function add(){
y = 100;
console.log(‘add():’ + y);
}
// var y = 1;
add();
console.log(‘全局:’ + y);
/*
结果输出:
add():100
全局:100
*/
1.浏览器获得js文件之后,不会立刻执行代码,而是全篇快速扫描一遍,把变量预先解析,把变量的声明代码提前
console.log('log:x = ’ + x);
var x = 10;
add()
function add(){
console.log(‘add()’);
}
/*
结果是:
log:x = undefined
add()
*/
预解析会将x和add函数的声明提前,即在代码最前面隐形地加上:
function add();
var x;
2.函数也是变量;函数体不会被提前,但函数体内部的局部变量也会有预解析,隐形地加在函数体内最上方
2.1 函数add()里局部变量会被预解析:
add()
function add(){
y = 100;
var y = 1;
console.log('add():y = ’ + y);
}
console.log('全局中y = ’ + y);
/*
add():y = 1
Uncaught ReferenceError: y is not defined
*/
解释:本来add()函数中,在没有全局变量定义的情况下直接使用y,系统会将y变成全局变量,但是预解析使得代码前面被隐形地加上了var y;
,即:
add()
function add(){
var y;
y = 100;
y = 1;
console.log('add():y = ’ + y);
}
console.log('全局中y = ’ + y);
因此add()函数里的y依然是局部变量,在全局环境下使用console.log就会报错
2.2 当没有定义全局变量,却在函数中直接使用,即该变量为全局变量时,预解析会把该变量的声明加到函数声明之后(在函数执行时预解析)
add()
function add(){
y = 100;
// var y = 1;
console.log('add():y = ’ + y);
}
console.log('全局中y = ’ + y);
相当于:
function add();
var y;
add()
function add(){
y = 100;
// var y = 1;
console.log('add():y = ’ + y);
}
console.log('全局中y = ’ + y);
/*
结果是:
add():y = 100
全局中y = 100
*/
2.3 由于预解析的顺序是从上到下的,要在预解析函数之后才会扫到函数里 要在函数执行时才会预解析函数里的内容,所以,如果在函数调用之前使用这个伪·局部变量,会报错:
console.log('全局中y = ’ + y);
add()
function add(){
y = 100;
// var y = 1;
console.log('add():y = ’ + y);
}
结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
'add():y = ’ + y);
}
console.log('全局中y = ’ + y);
/*
结果是:
add():y = 100
全局中y = 100
*/
2.3 由于预解析的顺序是从上到下的,要在预解析函数之后才会扫到函数里 要在函数执行时才会预解析函数里的内容,所以,如果在函数调用之前使用这个伪·局部变量,会报错:
console.log('全局中y = ’ + y);
add()
function add(){
y = 100;
// var y = 1;
console.log('add():y = ’ + y);
}
结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。