带你走进JavaScript(八)擅长的领域"/>
夜光带你走进JavaScript(八)擅长的领域
夜光序言:
留一阵冰清澈骨的痛,裹一身素素淡淡的忧,何时你才能读懂那一双多情的眼眸。
正文:嗯唔~~ JS中的let变量:
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。
在Function中局部变量推荐使用let变量,避免变量名冲突。
作用域规则
let 声明的变量只在其声明的块或子块中可用,这一点,与var相似。
二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数。
function varTest() {var x = 1;if (true) {var x = 2; // 夜光:同样的变量console.log(x); // 2}console.log(x); // 2
}function letTest() {let x = 1;if (true) {let x = 2; // 夜光:不同的变量 console.log(x); // 2 }console.log(x); // 1
}
核心1:我们 → JavaScript 允许重复声明变量,后声明的覆盖之前的
var a = 1111;
var a = 'x';
console.log(a);
// 嗯唔,输出 'x'
核心2:嗯唔,JavaScript 允许重复定义函数
JavaScript 没有重载这个概念,它仅依据函数名来区分函数。
后定义的同名函数覆盖之前的,与参数无关。
function test() {console.log("test");
}
test(); //输出 "test arg0 + undefined"function test(arg1) {console.log("test arg" + arguments.length + " + " + arg1);
}
test(1,2); //输出 "test arg2 + 1"
实参个数如果比形参少,那么剩下的默认赋值为 undefined
如果实参传的比形参数量多,那么是全部都会被传进去的
只不过没有对应的形参可以引用(但可以用 arguments 来获取剩下的参数)。
function test(arg1) {for(var i=0; i<arguments.length; i++) {console.log(arguments[i]);}
}
test(1,2); //输出 1 2
核心3:变量与函数重名的时候,变量生效
这涉及到了变量和函数的预解析:
- 变量声明会被顶置,函数声明也会被顶置且比变量更先声明。
- 变量的声明和赋值语句一起写时,JS引擎在解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置。
- 声明过的变量不会再重复声明。
var a = 100;
function a() {return "function";
}
console.log(a); //输出 100
console.log(a());
/*
报错
Uncaught TypeError: a is not a function(anonymous function) @test.html:9
*/
JS 中有两种函数,一种是普通函数,一种是函数对象。
下面的这种就是“函数对象”,它实际上是声明一个匿名函数,然后将该函数的 init 方法赋值给该变量。
var a = 100;
var a = function() {return "function";
}
console.log(a);
/*
输出
function() {return "function";
}
*/
console.log(a()); //输出 "function"
核心4:函数与内部变量重名
定义普通函数,即在 window 变量下,定义一个 key,它的名字为该函数名,值为该函数的地址。
嗯唔~~ 函数内部的 this 指向 window 对象。
function a() {console.log(this); //嗯唔~~~ 输出 window{...}this.a = 1; //夜光:即 window.a = 1,此时window下的function a已经被该变量覆盖了。var a = 5; //下面的这几个变量都是局部变量,仅在花括号范围内有效。 a = 10;var v = "value"return "function";
}
console.log(a); //输出 function a {...}
console.log(a()); //输出 "function"
console.log(a); //输出 1
console.log(v);
/*
输出
Uncaught ReferenceError: v is not defined(anonymous function) @ mycolor.html:15
*/
JavaScript 数据类型
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
嗯唔~~~
JavaScript 拥有动态类型
JavaScript 拥有动态类型。
这意味着相同的变量可用作不同的类型:
var x; // x 为 undefined
var x = 1111; // 现在 x 为数字
var x = "Genius"; // 现在 x 为字符串
JavaScript 字符串
字符串是存储字符(比如 "Bill Gates")的变量。
字符串可以是引号中的任意文本。
我们可以使用单引号或双引号:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>夜光</title>
</head>
<body><script>var carname1="Genius Team XC61";var carname2='Genius Team XC62';var answer1='It\'s alright';var answer2="He is called \"001\"";var answer3='she is called "002"';document.write(carname1 + "<br>")document.write(carname2 + "<br>")document.write(answer1 + "<br>")document.write(answer2 + "<br>")document.write(answer3 + "<br>")
</script></body>
</html>
嗯唔~~ JavaScript 数字
JavaScript 只有一种数字类型。
数字可以带小数点,也可以不带:
【极大或极小的数字可以通过科学(指数)计数法来书写:】
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>夜光</title>
</head>
<body><script>var x1=111.00;var x2=11;var y=12345e5;var z=12345e-5;document.write(x1 + "<br>");document.write(x2 + "<br>");document.write(y + "<br>");document.write(z + "<br>")
</script></body>
</html>
JavaScript 布尔,所有编程语言不可避免都会接触这个
布尔(逻辑)只能有两个值:true 或 false。
var x=true;
var y=false;
JavaScript 数组
<!DOCTYPE html>
<html>
<body><script>var i;var cars = new Array();cars[0] = "001";cars[1] = "002";cars[2] = "003";for (i=0;i<cars.length;i++){document.write(cars[i] + "<br>");}
</script></body>
</html>
Undefined 和 Null
Undefined 这个值表示变量不含有值。
可以通过将变量的值设置为 null 来清空变量。
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>夜光</title>
</head>
<body><script>var person;var car="Genius";document.write(person + "<br>");document.write(car + "<br>");var car=null;document.write(car + "<br>");
</script></body>
</html>
更多推荐
夜光带你走进JavaScript(八)擅长的领域
发布评论