前端入门篇(三十八)JS基础5函数(1)

本文详细介绍了JavaScript中的函数重命名、匿名函数、参数默认值的设定、动态参数处理、作用域规则(全局和局部)、以及函数预解析的概念,帮助读者理解JavaScript编程中的重要概念。
摘要由CSDN通过智能技术生成

4.函数重命名:

var 新函数名 = 旧函数名;

可以以var 返回值 = 新函数名(实参);调用

5.匿名函数的定义

var func1 = function () {

console.log(‘匿名函数’)

}

func1();//调用

函数的arguments


参数默认值

当实参传给形参个数不够时,形参会出现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性能相关的书籍,以及设计者模式,在实践中都会用的到。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

html5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值