JS(javascript):是一种编程语言,它可以操控网页的行为。
JS的三种引入方法:
(1)把JS写在HTML文件中,写在script标签中,即内部写法。
<script>
alert("这是内部引入");
console.log("hello");
</script>
(2)把JS写在JS文件中,然后在HTML文件中通过script标签引入,写项目时则把JS放在单独的文件夹,即外部写法。
<script type="text/javascript" src="./my.js"></script>
(3)把JS代码写在开始标签中,当成开始标签的属性,即行内写法。
<body>
<input type="button" onclick="alert('hello')" value="button" name="button">
</body>
(1)JS中区分大小写。
(2)忽略空白符,即不起作用;如空格,换行,tab键。
(3)语句后面可以不加逗号。
(4)标识符和关键字。
(5)注释。
<script>
var a;
//var b; 这是单行注释
</script>
<script>
/*
var a;
var b;
console.log(a);
*/这是多行注释
</script>
在代码进行预编译的时期,会对变量和函数进行提升,且函数是整体得到提升。
<script>
console.log(a);
// 输出结果为undefined,就是因为在预编译的阶段对a进行了声明,所以没有报错。
var a=1;
</script>
<script>
{// 说明函数在预编译的阶段,整体得到提升,赋值也会得到提升;但全局变量不会,只有声明得到提升。
f();
// 输出undefined,10
function f(){
console.log(a)
var a=10;
console.log(a);
}
f();
// 输出undefined,10
}
</script>
JS中有两种作用域:全局作用域和局部作用于。
全局作用域:整个代码所有的地方都可以调用。
局部作用域:在函数内部声明的变量,只能在函数内部使用。
<script>
var a=1;
// 全局变量
var b=1;
function f(){
console.log(a,b)
// 虽然在函数内,但b前没有加var,所以属于全局变量,且不会提升,所以这里的b输出的是1。
var a=2;
// 局部变量,只能在函数内使用
b=2;
console.log(a,b);
}
f();
console.log(a,b)
// 输出的结果为undefined 1
// 2 2
// 1 2
</script>
基础的数据类型:
数值型number:1、对应的值有很多
2、不分整数和小数
3、有最大值和最小值
4、可以通过不同的进制显示
5、不能对小数进行运算
字符串string:要用’'或"" 把字符串包起来,且不分字符和字符串。
布尔boolean
未定义型underfiend
空值null
引用数据类型:object、array、function。
数据类型的转换有两种:(1)隐式类型转换:在代码的运行过程中,自动的转换类型。例:
<script>
var re="abc"+123;
console.log(re);
// -------abc123
console.log(typeof re);
// -----输出string
</script>
(2)强制转换类型:需要写代码强制转化。例:
<script>
console.log(parseInt(3.14));
// -----输出3
console.log(Number("123"));
// ----输出123
console.log(Number("123abc"));
// ---输出NaN
</script>
EC(G):全局执行上下文,存储全局的加var、加function的数据,放在vo区域中。
VO:位于EC(G)中,存储局部的加var、加function的数据。
GO:全局的数据,无论是加var还是不加var,或是function的数据;在默认情况下,GO中也存储了许多默认对象。
例题一:
<script>
var i=0;
function A() {
var i=10;
function x() {
console.log(i);
}
return x;
}
var y = A();
y();
function B() {
var i=20;
y();
}
B()
// 输出结果为10 10
</script>
例题二:
<script>
let a = 0, b = 0;
function A(a) {
B = function (b) {
alert(a+b++)
}
alert(a++)
}
A(1)
B(2)
// 输出结果为 1 4
</script>
例题三:
<script>
var a=10, b = 11, c = 12;
function f(a) {
a = 1;
var b = 2;
c = 3;
}
f(10);
console.log(a);
console.log(b);
console.log(c);
// 输出结果为 10 11 3
</script>
这一类型,一定要分清全局变量和局部变量,加var的要提升,函数要整体提升,没加war的需要去全局里找;如果都没找到就是没有定义,就会报错。
有的会形成闭包,在闭包中的数据,在外部不能被调用,也不会被销毁。闭包是指有权访问另一个函数作用域变量的函数,创建闭包的通常方式,是在一个函数内部创建另一个函数。对于闭包的实际应用,我虽然理解,但是无法把这个抽象的问题解释清楚,网上有很多文章,但对闭包的理解各有不同,所以对于闭包,还是要有自己的理解,这样在遇到有闭包的时候,才不会迷。