JavaScript学习
![](https://img-blog.csdnimg.cn/img_convert/a740c59e8cb8fcf8bf2c3a794a810f9f.png)
![](https://img-blog.csdnimg.cn/img_convert/7febb5a6f23e0a98dfe42b8a40054bf9.png)
初识JavaScript
JavaScript相比于其它编程语言,学习 JS 有以下几个优势:
JavaScript 是最流行的客户端脚本语言,有着简单易学的特点。学有所成后,您可以使用一些基于 JavaScript 的框架(例如 JQuery、Node.js)来开发前端或后端应用程序;
JavaScript 可以在 Web 浏览器中运行,因此学习 JavaScript,您不需要配置任何特殊的运行环境;
JavaScript 的应用非常广泛,例如移动应用开发、桌面应用开发、Web 游戏开发等都会用到 JavaScript,为 JavaScript 程序员提供了更多的就业机会;
JavaScript 有着大量的优质框架和库,借助这些框架和库可以大大减少您的开发时间。
JavaScript是什么?
JavaScript的组成
![](https://img-blog.csdnimg.cn/img_convert/5e00c6734cfa21fd6bc8ecda16606892.png)
JavaScript有什么特点:
JavaScript 具有以下特点:
1 .解释型脚本语言
JavaScript 是一种解释型脚本语言,与 C、C++ 等语言需要先编译再运行不同,使用 JavaScript 编写的代码不需要编译,可以直接运行。
面向对象
JavaScript 是一种面向对象语言,使用 JavaScript 不仅可以创建对象,也能操作使用已有的对象。
弱类型
JavaScript 是一种弱类型的编程语言,对使用的数据类型没有严格的要求,例如您可以将一个变量初始化为任意类型,也可以随时改变这个变量的类型。
动态性
JavaScript 是一种采用事件驱动的脚本语言,它不需要借助 Web 服务器就可以对用户的输入做出响应,例如我们在访问一个网页时,通过鼠标在网页中进行点击或滚动窗口时,通过 JavaScript 可以直接对这些事件做出响应。
跨平台
JavaScript 不依赖操作系统,在浏览器中就可以运行。因此一个 JavaScript 脚本在编写完成后可以在任意系统上运行,只需要系统上的浏览器支持 JavaScript 即可。
一,变量的定义和使用
1.var
这是使用var声明一个变量。
var message = '三叶';
message = 666; //这样改变原有变量的操作是不推荐的,虽然这样的操作是被允许的。
!注意:如果在这里使用的严格模式,这样的操作是不被允许的。
var的作用域(函数作用域)
在函数作用域中:
function test(){
var number = 100; //局部变量
}
test();
console.log(number); // 输出undefined
当运行这段代码时会出现如下错误
![](https://img-blog.csdnimg.cn/img_convert/273a3b2e4c8465438246fe998a01a33a.png)
这是因为var在函数内被生命,使得它成为一个局部变量,在执行完函数后变量就会被销毁。
在块级作用域中:
if(true){
var number = 100;
}
console.log(number); //输出100
在去掉var声明后,变量为全局变量,可以成功输出对应的值
function test(){
number = 100; //全局变量
}
test();
console.log(number); // 100
但是不推荐使用这种方式,因为这种在函数内部声明的变量,不容易被管理。
var的变量提升
function test(){
console.log(number);
var number = 100;
}
test();
在运行上述代码时,你可能会觉得会报错,但事实却相反,这是由于JavaScript的变量提升的操作。实际上代码应该是:
function test(){
var number; //undefined
console.log(number);
var number = 100;
}
test();
2.let
使用let声明一个变量
let number = '100';
console.log(number);
let作用域(块级作用域)
相较于var函数式的作用域的作用域,let为块级作用域。
if(true){
let number = 100;
}
console.log(number); // undefined
这也就说明了let的作用域为块级作用域。
let不能被重复声明
相较于var而言,let变量不可以被重复声明。
let number;
let number;
如果你这样做了,你将会的到以下错误:
![](https://img-blog.csdnimg.cn/img_convert/683c5cd9015c436bf978bc121ccc2377.png)
基于JavaScript的引擎,它会记录每一个变量的标识符和所在的作用域。因此,我们可以这么操作。
var number = 100;
console.log(number); // 100
function test(){
var number = 10;
console.log(number); // 10
}
test();
console.log(number) // 100
let number = 100;
console.log(number); // 100
if(true){
let number = 10;
console.log(number); // 10
}
console.log(number) // 100
对于var和let而言,即使重复声明同一个变量,但是因为他们并不是不同类型的变量,他们只是声明变量在所声明的变量中怎样存在。
var name;
let name;
let age;
var age;
暂时性死区
在JavaScript中,JavaScript会将代码中的let声明的变量给找到,但是如果在声明变量之前使用该变量,则会出现报错。
console.log(name);
let name;
console.log(age);
var age;
![](https://img-blog.csdnimg.cn/img_convert/a3578882334e2becab6eddd0d487ca97.png)
使用var则不会报错,因为var有变量提升的特性,而let没有。
全局声明
在全局作用域中使用var声明的全局变量是在window中的,而let在全局作用域中声明的变量虽然也是全局变量,但并没有存在于window对象中,而是伴随着整个页面的生命周期的。
var name = "杰克";
let age = 20;
console.log(window.name) // 杰克
console.log(window.age); // undefined
for循环中的let声明
使用var在循环中:
for(var i=0;i<5;i++){
setTimeout(()=>{
console.log(i);
},1000)
}
![](https://img-blog.csdnimg.cn/img_convert/b9cb74c07b25c056f0a61e654ebec8c1.png)
for(let i=0;i<5;i++){
setTimeout(()=>{
console.log(i);
},1000)
}
![](https://img-blog.csdnimg.cn/img_convert/bb23b2a87223930fc9a625b6a9589259.png)
3.const
当我们使用const对变量进行声明,那么这个变量将会是不可修改的。
const number = 10;
number = 10;
如果你这样做了,你就会出现以下错误。
![](https://img-blog.csdnimg.cn/img_convert/03e90aadc29622838f6b5647ddadec82.png)
使用const变量声明的变量是不可以修改的,否则将无法运行,在编码的时候我们可以对一些不确定是否需要修改的变量使用const声明,这样可以有利于性能的提升。