因为"use strict"
加了引号,所以老版本的浏览器会把它当作一行普通字符串而忽略。
有的 script 基本是严格模式,有的 script 脚本是正常模式,这样不利于文件合并,所以可以将整个脚本文件放在一个立即执行的匿名函数之中。这样独立创建一个作用域而不影响其他 script 脚本文件。
1.1.2、为函数开启严格模式
- 若要给某个函数开启严格模式,需要把
"use strict"
或'use strict'
声明放在函数体所有语句之前
- 将
"use strict"
放在函数体的第一行,则整个函数以 "严格模式"运行。
============================================================================
- 严格模式对JavaScript的语法和行为,都做了一些改变
-
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量
-
严格模式禁止这种用法,变量都必须先用var 命令声明,然后再使用
-
严禁删除已经声明变量,例如,``delete x` 语法是错误的
-
以前在全局作用域函数中的
this
指向window
对象 -
严格模式下全局作用域中函数中的
this
是 undefined -
以前构造函数时不加
new
也可以调用,当普通函数,this
指向全局对象 -
严格模式下,如果构造函数不加
new
调用,this
指向的是undefined
,如果给它赋值,会报错 -
new
实例化的构造函数指向创建的对象实例 -
定时器
this
还是指向window
-
事件、对象还是指向调用者
-
函数不能有重名的参数
-
函数必须声明在顶层,新版本的JavaScript会引入“块级作用域”(ES6中已引入)。为了与新版本接轨,不允许在非函数的代码块内声明函数
========================================================================
- 高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出
接收函数作为参数
将函数作为返回值
-
此时 fn 就是一个高阶函数
-
函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数
-
同理函数也可以作为返回值传递回来
======================================================================
变量根据作用域的不同分为两种:全局变量和局部变量
-
函数内部可以使用全局变量
-
函数外部不可以使用局部变量
-
当函数执行完毕,本作用域内的局部变量会销毁。
闭包指有权访问另一个函数作用域中的变量的函数
简单理解:一个作用域可以访问另外一个函数内部的局部变量
-
打开浏览器,按 F12 键启动 chrome 调试工具。
-
设置断点。
-
找到 Scope 选项(Scope 作用域的意思)。
-
当我们重新刷新页面,会进入断点调试,Scope 里面会有两个参数(global 全局作用域、local 局部作用域)。
-
当执行到 fn2() 时,Scope 里面会多一个 Closure 参数 ,这就表明产生了闭包。
- 延伸变量的作用范围
4.5.1、点击li输出索引号
- 榴莲
- 臭豆腐
- 鲱鱼罐头
- 大猪蹄子
4.5.2、定时器中的闭包
- 榴莲
- 臭豆腐
- 鲱鱼罐头
- 大猪蹄子
======================================================================
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数
简单理解: 函数内部自己调用自己,这个函数就是递归函数
由于递归很容易发生"栈溢出"错误,所以必须要加退出条件 return
===========================================================================
-
浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用
-
深拷贝拷贝多层,每一级别的数据都会拷贝
-
Object.assign(target,....sources)
ES6新增方法可以浅拷贝
// 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用
var obj = {
id: 1,
name: ‘andy’,
msg: {
age: 18
}
};
var o = {}
for(var k in obj){
// k是属性名,obj[k]是属性值
o[k] = obj.[k];
}
console.log(o);
// 浅拷贝语法糖
Object.assign(o,obj);
// 深拷贝拷贝多层,每一级别的数据都会拷贝
var obj = {
id: 1,
name: ‘andy’,
msg: {
age: 18
}
color: [‘pink’,‘red’]
};
var o = {};
// 封装函数
function deepCopy(newobj,oldobj){
for(var k in oldobj){
// 判断属性值属于简单数据类型还是复杂数据类型
// 1.获取属性值 oldobj[k]
var item = obldobj[k];
// 2.判断这个值是否是数组
if(item instanceof Array){
newobj[k] = [];
deepCopy(newobj[k],item)
}else if (item instanceof Object){
// 3.判断这个值是否是对象
newobj[k] = {};
deepCopy(newobj[k],item)
}else {
// 4.属于简单数据类型
newobj[k] = item;
}
}
}
deepCopy(o,obj);
==========================================================================
正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。
正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。
-
实际开发,一般都是直接复制写好的正则表达式
-
但是要求会使用正则表达式并且根据自身实际情况修改正则表达式
在JavaScript中,可以通过两种方式创建正则表达式
-
通过调用 RegExp 对象的构造函数创建
-
通过字面量创建
7.2.1、通过调用 RegExp 对象的构造函数创建
通过调用 RegExp 对象的构造函数创建
var 变量名 = new RegExp(/表达式/);
7.2.2、通过字面量创建
通过字面量创建
var 变量名 = /表达式/;
注释中间放表达式就是正则字面量
7.2.3、测试正则表达式 test
test()
正则对象方法,用于检测字符串是否符合该规则,该对象会返回true
或false
,其参数是测试字符串
regexObj.test(str)
-
regexObj
写的是正则表达式 -
str
我们要测试的文本 -
就是检测
str
文本是否符合我们写的正则表达式规范
示例
7.3.1、边界符
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
| 边界符 | 说明 |
| — | — |
| ^ | 表示匹配行首的文本(以谁开始) |
| $ | 表示匹配行尾的文本(以谁结束) |
如果^ 和 $ 在一起,表示必须是精确匹配
// 边界符 ^ $
var rg = /abc/; //正则表达式里面不需要加引号,不管是数字型还是字符串型
// /abc/只要包含有abc这个字符串返回的都是true
console.log(rg.test(‘abc’));
console.log(rg.test(‘abcd’));
console.log(rg.test(‘aabcd’));
var reg = /^abc/;
console.log(reg.test(‘abc’)); //true
console.log(reg.test(‘abcd’)); // true
console.log(reg.test(‘aabcd’)); // false
var reg1 = /^abc$/
// 以abc开头,以abc结尾,必须是abc
7.3.2、字符类
-
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了
-
所有可供选择的字符都放在方括号内
①[] 方括号
/[abc]/.test(‘andy’); // true
后面的字符串只要包含
abc
中任意一个字符,都返回true
②[-]方括号内部 范围符
/1$/.test()
方括号内部加上 - 表示范围,这里表示 a - z 26个英文字母都可以
③[^] 方括号内部 取反符 ^
/[^abc]/.test(‘andy’) // false
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
st(‘abcd’)); // trueconsole.log(reg.test(‘aabcd’)); // false
var reg1 = /^abc$/
// 以abc开头,以abc结尾,必须是abc
7.3.2、字符类
-
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了
-
所有可供选择的字符都放在方括号内
①[] 方括号
/[abc]/.test(‘andy’); // true
后面的字符串只要包含
abc
中任意一个字符,都返回true
②[-]方括号内部 范围符
/2$/.test()
方括号内部加上 - 表示范围,这里表示 a - z 26个英文字母都可以
③[^] 方括号内部 取反符 ^
/[^abc]/.test(‘andy’) // false
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-kQNCkKTU-1715488404208)]
[外链图片转存中…(img-i549TAPG-1715488404209)]
[外链图片转存中…(img-szPTLHKH-1715488404209)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
-