ECMA基础知识回顾
js的基础含义
javascript : script脚本语言,继承在浏览器中的一种语言
js分为三大模块:
① ECMA核心语法 主要内容有 语法,类型,语句,关键字,保留字,操作符,对象…………几乎没有兼容问题 担任解析器的角色 处理我们的逻辑代码
② DOM 英文全称 Document(文档) Object(对象) Model(模型) 借助DOM.APL可以轻松自如的删除,添加,替换和修改任何节点 文档对象模型;文档指的就是网页;把网页变成一个JS可以操作的对象;给了JS可以操作页面元素的能力;document;有一些兼容性问题;
③ BOM 浏览器对象模型;仅用来作用于窗口的指令,给了JS操作浏览器的能力;window;有许多兼容性问题
1、js的引入方法
外部引入<script type="text/javascript" src="路径"></script>
此种方法用在body的里面,标签的最后,主要是因为html文档是解释执行,从上往下。有效避免在JS文件里节点取不到,这跟引用框架JS文件一般放在head里的原理如出一辙
内部引入<script> ……include statements …… </script> (不常用)
标签内使用:(不常用)
2、script标签元素
属性:src type defer async
src 和 type 只是在引入时用到
noscript用来判断浏览器是否支持 js 或者是否禁用 js
defer 延迟属性只对外部引用的js有效果,含义为立即加载js,但是文档加载完成之前不执行。
async属性 只对外部引入的js有效果,异步加载js没有顺序可言( 不推荐 )
3、语法和标识符
① 完全对大小写敏感,所以一定要区分大小写————驼峰式命名
② 标识符 指变量,函数,属性,或参数的名字
4、有特定作用的关键字不能作为标识符,也有一部分保留字尽量不要作为标识符!
5、变量
var message // var 是关键字,用来声明和保存变量用的
变量: 用来保存信息和数据的,声明的变量没有初始化,那么该变量的默认值是undefined
变量是有作用域的,var声明的变量是局部变量,没有var声明的叫全局变量。
6、js最大的特点
单线程运行
7、获取节点:
document.getElementById("")
document.getElementByTagName("") 支持IE678及标准浏览器还有移动端,不太好用,
document.getElementByClassName("")不支持IE678 至少IE9以上
document.querySelector("")
document.querySelectorAll("") //不支持IE678 仅支持标准浏览器和移动端,性能好
8、数据类型:
① String 字符串类型
② Boolean 布尔类型
③ Number 数字类型
④ Null 空类型
⑤ Undefined undefined空类型
数组超出长度后返回undefined
当函数没有返回值时的默认返回值是undefined
变量声明未定义时 其值为undefined
⑥ Object 对象类型 值为对象或空 null
1、数据类型的检测 typeof
2、Array object null function 的关系和区别
3、什么是函数,参数,属性
4、函数和对象的关系
只有函数才可能定义块级作用域 或称为局部作用域
声明函数使用function关键字+函数名声明的函数
function text(){
}
声明函数 就是使用function关键字 有函数名 没有赋值给一个函数
函数表达式 就是使用function关键字 没有函数名 赋值给一个变量的函数
匿名函数 就是使用function关键字 但是没有函数名的函数 也没有赋值给一个变量 用来保护变量,因为作用域不一样,全局变量和局部变量不冲突!用来赋给事件,作为事件触发的
var i = function(){
此种写法称为函数表达式
}
一个是声明变量(函数) 一个是匿名函数 函数表达式
三者的区别
function text(){
var j = function(){
console.log('123')
} //()这样表示立即执行
function(){
console.log('456')
} //()这样会报错 ,仔细比较两者的区别
}
text();
函数表达式可以使用()操作符立即执行;函数声明不可以
var j = function(){
console.log(‘哈哈哈’);
}
也可以(function(){}这个括号用来把函数变成一个函数表达式)(立即调用)//这样的调用方法简写成()();
全局变量可以在任何地方访问
函数内的变量,对外部是不可见的
函数内部可以访问外部函数的变量
(function(num){
var i = num
function aaa(){
console.log(i);
} 内部函数可以访问上层函数的变量
console.log(i);
aaa();
})(2);
for(var i = 0 ; i< 10 ; i++){
(function(i){
function aaa(){
console.log(i);
}
})(i);
}
举例:
<!doctype html>
<html>
<head lang = "en">
<meta charset="utf-8"/>
<title>逻辑与规则</title>
<link rel="stylesheet" type="text/css" href="css/js99.css"/>
</head>
<body>
<ul>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
<script type="text/javascript" src="js/js99.js"></script>
</body>
</html>
相关javascript代码
var arr = document.querySelectorAll("ul li");
for (var i = 0; i < arr.length; i++) {
(function(i){
arr[i].onclick = function(){
console.log(i);
}
})(i)
};
其结果等同于下面js代码
var arr = document.querySelectorAll("ul li");
for (var i = 0; i < arr.length; i++) {
arr[i].index=i ;
arr[i].onclick = function(){
console.log(this.index);
}
};
1、javascript预解析和作用域
2、执行运算符()的运用
3、return的用法 函数参数的解析
全局
function fn(){
console.log('111')
}
console.log(fn()); 运行结果:111,undefined 每一个函数都有一个默认返回值undefined
最后利用今天所学知识做了一个关于计算加减乘除的方法:(如下)
function computer(){
var lth = arguments.length-1 ;
//console.log(lth);
if (arguments[lth]=='+') {
for (var i = 1 ; i < arguments.length-1 ; i++) {
arguments[0] += arguments[i] ;
}
console.log(arguments[0]);
}else if( arguments[lth] == '-'){
for (var i = 1; i < arguments.length-1; i++) {
arguments[0] -= arguments[i] ;
}
console.log(arguments[0]);
}else if (arguments[lth] == '*') {
for (var i = 1; i < arguments.length-1 ; i++) {
arguments[0] *= arguments[i] ;
}
console.log(arguments[0]);
}else if (
arguments[lth] == '/') {
for (var i = 1; i < arguments.length-1 ; i++) {
arguments[0] /= arguments[i] ;
}
console.log(arguments[0]);
}
}
computer(1,2,3,5,6,8,'+');
computer(15,2,2,3,5,3,'-');
computer(2,5,2,5,2,5,'*');
computer(200,2,2,5,'/');