10段代码打通js学习的任督二脉,web开发经典

分析

在Javascript中,this指向函数 执行时的当前对象,而非声明环境有

执行doFoo的时候执行环境就是doFoo函数,执行环境为全局。

执行doFoo2时是在对象内部调用函数,this指针指向该对象。

结果

I’m an a

2

用apply改变函数作用域

=============

function foo(somthing){

console.log(this.a, somthing);

}

function bind(fn, obj){

return function(){

return fn.apply(obj, arguments);

}

}

var obj = {

a:2

}

var bar = bind(foo, obj);

var b = bar(3);

console.log(b);

分析

apply、call、bind都有个作用就是改变作用域,这里用apply将foo函数的作用域指向obj对象,同时传入参数。

再简单分析一下bind函数内部的嵌套,执行bind函数的时候返回的是一个匿名函数,所以执行bar(3)的时候实际上是执行的bind内部的匿名函数,返回的是之前传入的foo函数的执行结果。

函数没有返回值的情况下默认返回undefined。

结果

2 3

undefined

new关键字

======

function foo(a,b){

this.val = a+b;

}

var bar = foo.bind(null, ‘p1’);

var baz = new bar(‘p2’);

console.log(baz.val);

分析

bind函数的第一个参数为null代表作用域不变,后面的不定参数将会和函数本身的参数按次序进行绑定,绑定之后执行函数只能从未绑定的参数开始传值。

结果

p1p2

自执行函数

=====

function foo(){

console.log(this.a);

}

var a = 2;

var o = {a:3,foo:foo};

var p = {a:4};

(p.foo=o.foo)();

分析

经常可以看到这样的代码

(function(){

//…

})()

这种代码通常是创建一个立即执行的函数同时避免污染全局变量。

很少有人去关注赋值语句执行之后会返回什么结果,其实就是返回当前值。也就是说当括号内执行完赋值之后,返回的是o对象中的foo函数。函数的执行环境中有一个a对象,嗯,就是它了~

答案

2

变量属性

====

var a = [];

a[0] = 1;

a[‘foobar’] = 2;

console.log(a.length);

console.log(a.foobar);

分析

当一个变量被声明后,扩充其属性并不会改变原数据类型。

结果

1

2

精度问题

====

var a = ‘foo’;

a[1] = ‘O’;

console.log(0.1+0.2==0.3||a);

分析

当操作小数时请小心,js的小数计算并不精确,所以上面的判断是false。

字符串变量是常量。

结果

foo

命名提升

====

foo();

var foo = 0;

function foo(){

console.log(1);

}

foo = function(){

console.log(2);

};

分析

声明的变量和命名函数都会被提升到代码的最前面,只不过声明的变量的赋值语句在代码中的位置不变。所以上面这段代码应该被理解为:

var foo;

function foo(){

console.log(1);

}

foo();

foo = 0;

foo = function(){

console.log(2);

};

结果

1

思考

foo();

var foo = 0;

function foo(){

console.log(1);

}

foo();

foo = function(){

console.log(2);

};

foo();

上面代码的结果:

1

报错

作用域

===

foo();

var a = true;

if(a){

function foo(){

console.log(‘a’);

}

} else {

function foo(){

console.log(‘b’);

}

}

分析

javascript并不是以代码段为作用域,而是以函数。

再根据命名提升的原则,所以这段代码应该是这样的:

function foo(){

console.log(‘a’);

}

function foo(){

console.log(‘b’);

}

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

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取


发知识点,真正体系化!**

[外链图片转存中…(img-tp3bZF2r-1712073651922)]

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取

[外链图片转存中…(img-vGKIZ9wU-1712073651922)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值