JavaScript 未分配给全局变量

标签 javascript sharepoint scope

我有以下代码,它将返回当前登录的 SharePoint 用户的登录名:

var currentUser;
var currentUserName;
ExecuteOrDelayUntilScriptLoaded(MainMethod,'sp.js');

function MainMethod() {
    GetName();
    alert("MAIN " + currentUserName);
}

function GetName(){
    this.clientContext = new SP.ClientContext.get_current();
    this.oWeb = clientContext.get_web();
    currentUser = this.oWeb.get_currentUser();
    this.clientContext.load(currentUser);
    this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));
}
function onQuerySucceeded() {
    currentUserName= currentUser.get_loginName().split("\\")[1];
    alert("GetName " + currentUserName);
}
function onQueryFailed(sender, args) {
    alert('Failed to retrieve user name');
}

当我运行代码时,我收到这 2 个警报消息框:

“GetName”名字.姓氏

“MAIN”未定义

currentUserName= currentUser.get_loginName().split("\\")[1]; 不应该将 firstname.lastname 值分配给全局currentUserName 变量?

最佳答案

您可以使用 window.currentUserName = currentUser.get_loginName().split("\\")[1] 确保您正在访问全局属性。

为了避免许多变量污染全局命名空间,您可以将它们分组在一个对象中,如下所示:

window.user = {
    currentUserName,
    currentUser
}

然后您可以通过window.user.currentUserName访问它。

关于JavaScript 未分配给全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37613824/

相关文章:

javascript - 如何在 JS 中独立于上下文(浏览器、节点)分配读取根变量?

groovy - 为什么在 Groovy 闭包中设置的实例变量的值在其外部不可见?

javascript - 如何删除 session cookie

Javascript 警报位置不在 chrome 的中心

javascript - 无法使用laravel中的with方法获取textarea值

c# - Sharepoint 2013 身份验证

javascript - Sharepoint 自定义 Web 部件启动脚本

javascript - 为 Protractor 设置 Screenshot Reporter

javascript - 使用 JavaScript 从 SP 列表中隐藏/删除 ContentType

ruby-on-rails - 使用常量还是类变量?