Js-w3school(2024(4),精通web前端开发

const x = (x, y) => {

var a=2;

return (xa)+(ya);

};

document.getElementById(“demo”).innerHTML = x(1, 5);//26

IE11 或更早的版本不支持箭头函数。

(二)函数参数

1.函数参数定义

functionName(parameter1, parameter2, parameter3) {

要执行的代码

}

函数参数(parameter)指的是在函数定义中列出的名称。

函数参数(argument)指的是传递到函数或由函数接收到的真实值。

2. 参数规则:无类型、无数量

JavaScript 函数定义不会为参数(parameter)规定数据类型。

JavaScript 函数不会对所传递的参数(argument)实行类型检查。

JavaScript 函数不会检查所接收参数(argument)的数量。

3. 如果调用参数时省略了参数(少于被声明的数量),则丢失的值被设置为:undefined。

4. 如果函数调用的参数太多(超过声明),则可以使用 arguments 对象(数组)来达到这些参数。

x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {//求合函数

var i, sum = 0;

for (i = 0; i < arguments.length; i++) {

sum += arguments[i];

}

return sum;

}

5.参数传值,对象传址

JavaScript 参数通过值传递:函数只知道值,而不是参数的位置。

如果函数改变了参数的值,它不会改变参数的原始值。

在 JavaScript 中,对象引用是值。

正因如此,对象的行为就像它们通过引用来传递:

如果函数改变了对象属性,它也改变了原始值。

(三)函数调用

1.在函数被定义时,函数内部的代码不会执行。在函数被调用时,函数内部的代码会被执行。

2.函数形式调用

function myFunction(a, b) {

return a * b;

}

myFunction(10, 2); // 将返回 20

2.作为方法调用

var myObject = {

firstName:“Bill”,

lastName: “Gates”,

fullName: function () {

return this.firstName + " " + this.lastName;

}

}

myObject.fullName(); // 将返回 “Bill Gates”

3.函数构造器调用

如果函数调用的前面是 new 关键字,那么这是一个构造函数调用。

// 这是函数构造器:

function myFunction(arg1, arg2) {

this.firstName = arg1;

this.lastName = arg2;

}

// 创建了一个新对象:

var x = new myFunction(“Bill”, “Gates”);

x.firstName; // 会返回 “Bill”

(四)函数Call、Apply方法重用

1.call() 方法,您可以编写能够在不同对象上使用的方法。

call() 方法是预定义的 JavaScript 方法。它可以用来调用所有者对象作为参数的方法。通过 call(),您能够使用属于另一个对象的方法。

var person = {

fullName: function(city, country) {

return this.firstName + " " + this.lastName + “,” + city + “,” + country;

}

}

var person1 = {

firstName:“Bill”,

lastName: “Gates”

}

person.fullName.call(person1, “Seattle”, “USA”);

//理解为person1.fullName(“Seattle”, “USA”)

2.通过 apply() 方法,您能够编写用于不同对象的方法。apply() 方法与 call() 方法非常相似,但是接受参数的方式不同

person.fullName.apply(person1, [“Oslo”, “Norway”]);

call()分别接收参数,apply()以数组形式接收参数

3.由于 JavaScript 数组没有 max() 方法,因此您可以应用 Math.max() 方法。

Math.max.apply(null, [1,2,3]); // 也会返回 3

Math.max.apply(Math, [1,2,3]); // 也会返回 3

Math.max.apply(" ", [1,2,3]); // 也会返回 3

Math.max.apply(0, [1,2,3]); // 也会返回 3

4.apply实现数组合并

Array.prototype.push.apply(arr1,arr2);

5.在 JavaScript 严格模式下,如果 apply() 方法的第一个参数不是对象,则它将成为被调用函数的所有者(对象)。非严格模式下,第一个参数值被指定为 null 或 undefined 时this值会自动替换为指向全局对象

(五)函数闭包

1.JavaScript 变量属于本地或全局作用域。全局变量能够通过闭包实现局部(私有)。

2. JavaScript 嵌套函数

所有函数都有权访问全局作用域。

事实上,在 JavaScript 中,所有函数都有权访问它们“上面”的作用域。

JavaScript 支持嵌套函数。嵌套函数可以访问其上的作用域。

function add() {

var counter = 0;

function plus() {counter += 1;}

plus();

return counter;

}

3.闭包

·闭包其实是在函数内部定义一个函数。

·闭包在使用的时候不会释放外部的引用,闭包函数内部的值会得到保留。

·闭包里面的匿名函数,读取变量的顺序,先读取本地变量,再读取父函数的局部变量。

·对于闭包外部无法引用它内部的变量,因此在函数内部创建的变量执行完后会立刻释放资源,不污染全局对象。

·闭包使用的时候要考虑到内存泄漏,因为不释放外部引用,但是合理的使用闭包是内存使用不是内存泄漏。

(1)自调用函数

var add = (function () {

var counter = 0;

return function () {return counter += 1;}

})();

add();

add();

add();

// 计数器目前是 3

该函数在自定义时候首先执行一次并初始化counter为0。这个自调用函数只运行一次。它设置计数器为零(0),并返回函数表达式。

add 成为了函数,它能够访问父作用域中的计数器。

计数器被这个匿名函数的作用域保护,并且只能使用 add 函数来修改。

这被称为 JavaScript 闭包。它使函数拥有“私有”变量成为可能。

闭包指的是有权访问父作用域的函数,即使在父函数关闭之后。

(2)for循环案例

var arrays = [];

for (var i=0; i<3; i++) {

arrays.push(function() {

console.log('>>> ’ + i); //all are 3

});

}

上面的这段代码,刚看了代码一定会以为陆续打印出1,2,3,实际输出的是3,3,3,出现这种情况的原因是匿名函数保存的是引用

当for循环结束的时候,i已经变成3了,所以打印的时候变成3。出现这种情况的解决办法是利用闭包解决问题。

for (var i=0; i<3; i++) {

(function(n) {

tasks.push(function() {

console.log('>>> ’ + n);

});

})(i);

}

闭包里的匿名函数,读取变量的顺序,先读取本地变量,再读取父函数的局部变量,如果找不到去全局里面搜索,i作为局部变量存到闭包里面,所以调整后的代码可以能正常打印1,2,3。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

总结

  • 框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。

  • 算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

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

658)]

总结

  • 框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。

  • 算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

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

喜欢这篇文章文章的小伙伴们点赞+转发支持,你们的支持是我最大的动力!

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值