js父级函数调用子函数出现函数未定义问题
2017-09-24 19:58
423 查看
首先定义了一个全局函数Locating,又在Locating内定义了一个局部函数pageScroll,然后我全局函数调用pageScroll时,报错Uncaught ReferenceError: pageScroll is not defined。
代码如下:
function Locating(locate,time){
console.log(locate+' -- '+time);
var div_locate=document.getElementById(locate);
var window_top_y = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离
var element_top_y = div_locate.offsetTop;//获取某元素顶部距离页面顶部的距离
var distance = window_top_y-element_top_y;//当前窗口与顶部的距离
var time = time;
var move_distance = time>50?Math.ceil((distance/Math.ceil(time/50))):distance;//每次移动的距离
//每次移动的位移应为distance/duration,要移动的位置为element_top_y,
function pageScroll() {
var top = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离
var dis_top = top - element_top_y;
window.scrollBy(0,-move_distance);
scrolldelay=setTimeout('pageScroll()',50);
if(dis_top<=0){
clearTimeout(scrolldelay);
}
// console.log(dis_top);
}
pageScroll();
}
一开始以为是作用域链的问题。
但如下相同结构的代码并没有执行错误
function a(){
console.log("a")
function b() {
console.log("b")
}
b()
}去论坛问了下。原来是执行调用setTimeout的原因
steTimeout函数机制就是用eval执行第一个参数'action()"字符串,既然action()字符串不存在,那么我把它换成了一个对象action进行测试,
原来setTimeout执行完成后,执行环境自动切换到window环境下,所以再次调用pageScroll()时才会出现函数未定义的错误。
解决方法是将setTimeout('pageScroll()',50)
写成
setTimeout(pageScroll,50);即把字符串写成对象。
好像setIntraval执行时是也会把环境切换到window对象下。
为什么会这样我也没搞清楚...
参考链接:
http://blog.csdn.net/getcomputerstyle/article/details/52101736 http://www.cnblogs.com/yuqingfamily/p/5816560.html
代码如下:
function Locating(locate,time){
console.log(locate+' -- '+time);
var div_locate=document.getElementById(locate);
var window_top_y = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离
var element_top_y = div_locate.offsetTop;//获取某元素顶部距离页面顶部的距离
var distance = window_top_y-element_top_y;//当前窗口与顶部的距离
var time = time;
var move_distance = time>50?Math.ceil((distance/Math.ceil(time/50))):distance;//每次移动的距离
//每次移动的位移应为distance/duration,要移动的位置为element_top_y,
function pageScroll() {
var top = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离
var dis_top = top - element_top_y;
window.scrollBy(0,-move_distance);
scrolldelay=setTimeout('pageScroll()',50);
if(dis_top<=0){
clearTimeout(scrolldelay);
}
// console.log(dis_top);
}
pageScroll();
}
一开始以为是作用域链的问题。
但如下相同结构的代码并没有执行错误
function a(){
console.log("a")
function b() {
console.log("b")
}
b()
}去论坛问了下。原来是执行调用setTimeout的原因
steTimeout函数机制就是用eval执行第一个参数'action()"字符串,既然action()字符串不存在,那么我把它换成了一个对象action进行测试,
原来setTimeout执行完成后,执行环境自动切换到window环境下,所以再次调用pageScroll()时才会出现函数未定义的错误。
解决方法是将setTimeout('pageScroll()',50)
写成
setTimeout(pageScroll,50);即把字符串写成对象。
好像setIntraval执行时是也会把环境切换到window对象下。
为什么会这样我也没搞清楚...
参考链接:
http://blog.csdn.net/getcomputerstyle/article/details/52101736 http://www.cnblogs.com/yuqingfamily/p/5816560.html
相关文章推荐
- 服务端控件验证与自己写的javascript验证函数同时存在时出现的冲突问题(RequiredFieldValidator&JS)
- escape函数解决js中ajax传递中文出现乱码问题
- js里出现同名函数后问题
- escape函数解决js中ajax传递中文出现乱码问题
- nuxt.js引入客户端脚本和第三方库出现window/document/ navigator未定义问题
- recv出现乱码后——对recv函数的一点思考和要注意的问题
- js中解决函数中使用外部函数局部变量的问题(闭包问题)
- cocos2d-x jsbinding出现的一些问题列表(持续更新)
- 在webview中addJavascriptInterface,js调用java函数打包出现不响应,即使对混淆处理
- reactjs 生成的 radio 点击无反应 或者出现反选的问题
- 多层动态加载js文件出现的问题终极解决【深海原创】
- js函数传入参数为字符串问题解决思路
- JS函数中的重载问题
- 关于react-native出现SyntaxError /Users/mac/firstTest/index.ios.js: Unexpected token的问题
- js函数在window.location.href跳转页面传参由于空格引发的一个小问题
- 关于ORBACUS产品网络通讯函数出现的问题
- 在js中如何实现方法重载?以及函数的参数问题
- JS 循环绑定多个元素的点击事件时出现的闭包问题与解决方案
- Matlab中出现:尝试将SCRIPT SVD作为函数执行:C:\User\lc\...问题的解决方法
- JQuery文件重复引用问题导致某些函数调用时出现undefined