1.作用域
1.1定义一个变量:
var a = 1;
1.2定义一个对象:
var bianchma = {zhiyuan:null}
1.3定义一个函数:
1.function a(){}
2.var b=function(){}
3.!(function(){ })
1.4全局变量
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。
2.自执行函数——在js加载的时候就能自己运行
>!(function(){
console.log(2)
})()
4
<true
函数必须有名字,
所以,用括号括起来,就成了自执行函数(闭包,匿名函数)
3.内部函数如何外部调用?
我们输入如下代码,
!(function(){
function jm(){
console.log('加密')
}
})()
jm();
Ctrl+enter运行:
得到jm未定义,所以需要定义全局变量,进行赋值
var jm_;
!(function(){
function jm(){
console.log('加密')
}
jm_ = jm
})()
4.变量类型转换:
+字符串 = 字符串//字符串的优先级最高
+""得到字符串:
var jm_;
!(function(){
function jm(){
console.log('加密成功')
}
jm_ = jm;
})()
jm_ +""
->
5.JS 浏览器对象BOM
脱离浏览器,在外部不能直接使用的
windows 是一个全局变量,是由浏览器提供的,组成要素有:
- 浏览器环境
- 引擎的环境(js虚拟机/VM,html渲染环境)
- 自己写的代码
对于爬虫来说,缺的就是浏览器环境,也就是我们需要模拟的环境
window={
location:{
href:"https://www.runoob.com/js/js-scope.html"
}
}
location:浏览器的本机地址
host:"www.runoob.com"//主机名
href:"https://www.runoob.com/js/js-scope.html"网址
补头:
浏览器支持,但是本=本机代码不支持的参数:
- location
- navigator
- cookie
- window
6.html渲染环境
详情链接:https://www.runoob.com/js/js-htmldom.html
document 全局变量——js的v8引擎会自带
需要补头——补齐该环境
事件-点击事件,滑动事件
奇葩的网站加密:利用submit提交按钮,比如菠菜网站
例:document.write
这样的代码,在浏览器和本机调试运行,结果是不一样的:
document = {
write:function(){
}
}
console.log(document.write + '')
浏览器运行结果: ƒ write() { [native code] }
本机 运行结果: function(){ }
解决思路:HOOK 方法document.write.toString
document.write + “”
document.write.toString()
2.HTML 事件的例子:
指纹:检测是不是同一个用户
- 当用户点击鼠标时——//登录、
- 当网页已加载时——//浏览器指纹-收集你是否为浏览器环境
- 当图像已加载时——//滑块还原canvas,也可以做浏览器指纹
- 当鼠标移动到元素上时——//浏览器指纹,无感校验
- 当输入字段被改变时
- 当提交 HTML 表单时
- 当用户触发按键时
3.创建元素/标签document.createElement
var para = document.createElement("p")
undefined
para.className = "志远"
"志远"
document.body.appendChild(para)
<p class="志远"></p>