Javascript百炼成仙——笔记

1.20 作用域

作用域:查找某一个变量的范围

当发生作用域嵌套时,只能里面访问外面的,外面无法访问里面的。作用域嵌套一般针对全局作用域和函数作用域,或者是函数作用域和其他函数作用域。

函数向上寻找外部变量,当找到变量的声明就不会继续往上寻找。

1.21 参数传递

传参的过程相当于给预备变量赋值的过程,没有传参时,预备变量即是undefined。

所有参数会被装载到函数内部arguments里面。参数根据arguments数组进行赋值。

1.22 闭包

产生闭包的条件:

1、函数内部也有一个函数

2、函数内部的函数里面用到了外部函数的局部变量

3、外部函数把内部函数作为返回值return出去了

test()();

第一个括号调用test函数,返回了一个内部函数,第二个括号调用返回的内部函数。

var inner=test();

inner();

正常情况,函数里面的局部变量会在调用函数结束后销毁;使用闭包,局部变量不随原函数销毁而销毁,而是继续存在。

利用闭包操作可以减少不必要的全局变量。手动赋null值可自动清除无用变量。

1.23 自执行函数

(定义一个匿名函数)();

定义之后立即执行,但只会执行一次。

一般可和闭包配合使用,直接得到闭包环境下的内部函数,外部函数只是为了产生闭包环境而临时定义的函数。

var inner=(

​ function(){

​ var a=123;

​ return function (){

​ console.log(a);

}

})();

inner();//123

1.24 “new” 一个函数

函数里this永远指向当前函数的调用者

对象模板,用函数设计一种对象的共同属性

构造函数首字母大写

函数使用new后会从内部产生新对象,函数内this指向该对象

将基本数据类型赋值给某一个变量,然后将此变量赋值给另一个变量,可看作复制,此时两个变量内存处在不同空间。而引用数据类型会指向同一块内存地址。

1.25 回调函数

函数可以作为另一个函数的参数

function eat(food,callback){

​ callback(food);

}

调用时临时编写新函数

eat(‘’肉“,function(food){

​ alert(“开心地吃”+food);

});

2.3 变量和简单数据类型

简单数据类型:字符串、数值型、布尔型、null、undefined

变量需要用var定义

通过+可以连接字符串

alert是弹窗函数

2.4/2.5 精度问题/化浮为整

0.1+0.2=0.3000000000004

split函数:将字符串通过某种规则和标记符号进行分隔,并返回一个数组

indexOf函数:在字符串中搜索特定字符串,返回检索到的下标,检索失败返回-1

function add(num1,num2){

​ //将数字转换为字符串

​ num1=num1.toString();

​ num2=num2.toString();

​ //判断是否有小数点

​ var a,b;

​ if(num1.indexOf(“.”)!==-1){

​ a=num1.split(".")[1].length;//获取小数点后位数

​ }else{

​ a=0;

​ }

​ if(num2.indexOf(“.”)!==-1){

​ b=num2.split(".")[1].length;//获取小数点后位数

​ }else{

​ b=0;

​ }

​ var max=a;

​ if(a<b){

​ max=b;

}

​ var beishu=1;

​ for(var i=0;i<max;i++){

​ beishu=beishu*10;

}

num1=num1*beishu;

num2=num2*beishu;

//bug:1.001*1000=1000.999999999999999

var sum=(num1+num2)/beishu;

}

replace函数:字符串替换,只能替换第一个匹配项

function add(num1,num2){

​ //将数字转换为字符串

​ num1=num1.toString();

​ num2=num2.toString();

​ var index1=num1.indexOf(“.”);

​ var index2=num2.indexOf(“.”);

​ //获取小数点位置

​ //如果有小数点,获取小数点后位数

​ var ws1=0;

​ var ws2=0;

​ if(index1!=-1){

​ ws1=num1.split(".")[1].length;

​ }

​ if(index2!=-1){

​ ws2=num2.split(".")[1].length;

​ }

​ var bigger=(ws1>ws2)?ws1:ws2;

​ var smaller=(ws1<ws2)?ws1:ws2;

​ var zerosCount=bigger-smaller;

​ num1=num1.replace(".","");

​ num2=num2.replace(".","");

​ if(ws1==smaller){

​ for(var i=0;i<zeroCount;i++){

​ num1+="0";

​ }

​ }else{

​ for(var i=0;i<zeroCount;i++){

​ num2+="0";

​ }

​ }

​ var sum=parseInt(num1)+parseInt(num2);

​ var beishu=1;

​ for(var i=0;i<max;i++){

​ beishu=beishu*10;

}

sum=sum/beishu;

return sum;

//num1=num1*beishu;

//num2=num2*beishu;

//bug:1.001*1000=1000.999999999999999

//var sum=(num1+num2)/beishu;

}

3.3 jQuery选择器

$('#btn').click()不能放在对应标签上,

除非用 $(document).ready(function(){})监听

3.4 使用jQuery操作dom

var text=$('ul li:eq(1)').text();//后代选择器

var text=$('ul li').eq(1).text();

3.4.3 链式调用

var myFunction=function(){

​ return{

​ func01:function(){

​ console.log("1");

​ return this;

​ },

​ func02:function(){

​ console.log("2");

​ return this;

​ },

​ }

}

var obj=myFunction();

obj.func01().func02();//链式调用

3.4.4

$ ("<li id=\"a5\">新的</li>").appendTo($('ul'));

$('ul').append($ ("<li id=\"a5\">新的</li>"));

html方法:替换目标元素里面所有html

3.4.5 删除和隐藏节点

remove方法:删除页面上的元素

hide方法:隐藏元素,设置display:none

show方法:显示元素,设置display:block(行内元素设置为inline)

3.4.6 jQuery操作属性

attr方法:获取元素属性/设置元素属性。第一个参数是属性名称,第二个参数是新的值。设置多个属性,参数采用键值对形式。

remove方法:删除元素的属性。

3.4.7 内容操作

html、text方法:不传入参数就获取元素内部的html或文本,传入参数则是替换

text会过滤元素内的html标签

给元素加上value属性,可用val方法获取input元素、下拉框、多选框、单选按钮的值

3.4.8 遍历和寻找节点

children方法:获取子元素(无法继续向下查找)

parent方法:获取父节点

prev、next方法:获取兄弟节点

siblings方法:获取所有兄弟元素

4.4 vue 简单数据绑定

v-model:表单组件的双向绑定

v-text:绑定文本数据

{{message}}

4.51 v-on

v-on:行为=“处理函数名” :事件绑定

简写 @行为

4.5.2 事件冒泡

.stop:阻止事件冒泡 @click.stop=" 子处理函数",不触发父元素的@click

.prevent:阻止提交,只对form、a有效 阻止form、a标签默认刷新操作

.capture:优先触发 添加在优先触发的事件上

.self:当单击元素本身(非子元素部分),只允许元素自身触发,子元素无法触发。

.once:只触发一次

4.6 条件语句

v-if

v-else

v-else-if

4.9 组件开发

props属性:当前组件可接收的属性

this.$emit('函数名') 子组件调用父组件的方法

4.11 监听属性

属性可以是data中的变量,也可以是props中定义的数据

4.12 过滤器

在vue对象中加入filters过滤器,定义过滤函数

过滤器被挂在$options.filters

filters:{

​ dataFormat:function(val){

​ return val;//数据格式化处理

​ }

}

使用:{{ today | dataFormat}}

样式过滤器:

filters:{

​ boxStyle:function(val){

​ return “<span>……</span>”;//格式化处理

​ }

}

使用:<span v-html="$options.filters.boxStyle($options.filters.dataformat(today))"></span>

<span v-html="$options.filters.dataformat(today)"></span>

全局过滤器:Vue.filter(过滤器名字,函数体)

6.1 es6 变量定义

let定义变量,实现块级作用域,内部变量不影响全局

const声明只读常量

6.2 解构赋值

获取对象中的方法以及赋值给对应变量的过程一次性完成

let {eat,sleep}=Person;

let {eat,sleep,name="123"}=Person;//设置默认值

6.3 字符串

ps:字符串允许被当作数组一样使用,可以用下标获取字符串中某个位置的字符

for(let s of str){};//使用in,则获取每个字符对应的下标;

允许字符串通过for循环遍历

模板字符串:允许用反引号简化字符串定义

let name='zhang'

let sayHi=‘hello,${name}!’

新增api:

padStart(生成字符串的长度,用来补全的字符串默认空格)返回新的字符串,用参数字符串从左补全字符串

padEnd(生成字符串的长度,用来补全的字符串默认空格)返回新的字符串,用参数字符串从右补全字符串

6.4 Proxy代理

Proxy全局对象

Proxy(target,handler)构造函数,target是被代理的对象,handler是声明了各类代理操作的对象,最终返回一个代理对象

Proxy可以拦截get、set对象属性等操作

obj.age="28";//希望获取number,却赋值了string。

给obj生成一个代理,不直接暴露obj,代理对象会对数据进行校验。

6.5 数组

Array.of方法:将参数中的所有值作为元素而形成数组

Array.from方法:将类数组对象或可迭代对象转化为数据,第二个参数是map回调函数,对每个元素进行处理

类数组对象:一种可以遍历的对象,只要对象有length,且有0、1、2、3这样的属性。

新的数组方法:

find:查找元素,返回第一个元素

findIndex:查找元素索引,返回第一个索引

fill:将一定范围索引的数组元素内容填充为单个指定的值

copyWithin:将一定范围索引的数组元素修改为此数组另一指定范围索引的元素

entries:遍历

keys:遍历键名

values:遍历键值

let newListData=[...listData];//快速复制数组

6.6 函数

箭头函数

(参数)=>{}

参数=>{}

_=>{}

()=>{}

如果函数体仅仅是一个简单的return语句,那么大括号和return关键字都可以省略

箭头函数里的this对象是定义函数的对象(window),而不是使用函数时的对象。

如果用function定义函数,里面的this会在使用时动态绑定,指向使用函数的对象。

箭头函数里的this指向外面最近的大括号处在的环境,遇到箭头函数继续向上找

6.7 对象

let obj={

​ name:name

}

简写:

let obj={name}

当对象的属性名称是变量

let obj={

​ [keys]:"1234"

}

6.8 promise、async

new Promise((resolve,reject)=>{异步操作}.then(()=>{}).catch(()=>{}))

Promise对象的两个函数钩子:resolve、reject

异步操作resolve后触发then方法,如果是reject则触发catch方法

async是es7提供的关键字,async函数执行时,遇到await会暂停执行,等到触发的异步操作完成后,才会恢复函数执行

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值